Team Fortress 2 server commands run in one of three places: the dedicated-server console, an authenticated RCON session, or a hosting control-panel console that is already connected to the server. Stock TF2 gives you broad, all-or-nothing RCON control; it does not provide a built-in list of individual operators with different permissions. For persistent settings, put recurring commands in tf/cfg/server.cfg and write ban lists to disk with writeid or writeip.
This guide shows the exact RCON workflow, safe player moderation, map and match controls, bot commands, cheat restrictions, persistence, troubleshooting, and the difference between vanilla RCON and SourceMod.
Where do I type TF2 server admin commands?
A command works only when it reaches the server. Typing a server command in your local game console without the rcon prefix does not administer a remote server; the client may simply ignore it or treat it as a local command. First identify where your command is going: the server process, a remote client, or a provider’s panel.
Dedicated-server console
If you are running the TF2 dedicated server process, type commands directly into that process’s console. Do not add rcon; that prefix is for a remote client. This is the most direct administrative path because the command is already on the machine running the server.
Remote game-console RCON
From a connected TF2 client, enable and open the developer console, authenticate once, then prefix each server command with rcon. For example, use rcon status, not just status. The authentication applies to subsequent RCON commands in that client session, but it does not grant different permissions for different commands.
Hosted control-panel console
Many managed server panels expose a console that is already attached to the server. In that console, enter the command itself, such as status or changelevel cp_dustbowl, unless the panel specifically documents a different syntax. You normally do not repeat rcon there. Protect the panel login as carefully as the RCON password because it can provide the same broad control.
Command syntax basics
Replace placeholders such as <map>, <userid>, and <steamid> with real values, but do not type the angle brackets. Quote names and reasons that contain spaces. A command entered on the wrong side of the connection is the most common reason for an apparently valid command doing nothing.
How do I use RCON in TF2?
The complete workflow is: enable the developer console, open it, authenticate with the server’s RCON password, and send server commands with the rcon prefix.
- In TF2, open Options, choose Advanced, and enable the developer console.
- Press the backtick/tilde key (
`or~) to open the console. Keyboard layouts can place this key differently. - Authenticate by entering
rcon_password <password>. Replace the bracketed text with the RCON password; do not include angle brackets. - Test the session with
rcon status. A successful response lists the current map and connected players, including the userids needed by some moderation commands. - Run additional commands with the same prefix, for example
rcon mp_timelimit 20orrcon changelevel cp_badlands.
If authentication fails, stop and verify that you are connected to the intended server and that the password matches the server configuration. Do not keep guessing a password in a shared chat or recording. Re-entering rcon_password in the console is safer than pasting the credential into a public text channel.
RCON is a server credential, not a personal Steam password. Use a unique password, restrict access to trusted administrators, and change it if it appears in chat, a screen recording, a script, or a shared configuration file. Vanilla RCON is effectively all-or-nothing: anyone who knows the password can issue powerful commands, including cheats and map changes. There is no stock TF2 operator list that lets one person kick while preventing that person from changing maps.
How do I identify, kick, and ban a player?
Use status first whenever a name could be ambiguous. It gives you a numeric userid for the current connection and exposes SteamID information used in documented ban workflows. Treat the output as a point-in-time record: a userid can change after a disconnect and reconnect.
Inspect the player list
Run status in the server console or rcon status through RCON. Record the player’s exact userid for a temporary action and the SteamID for a ban that should follow the account rather than that single connection. Confirm the name and identifier before acting, especially when several players use similar names.
Kick by name
kick "<name>" removes a player by displayed name. Quotation marks are important when the name contains spaces. Name-based actions are less precise when players use unusual characters, similar-looking names, or impersonation. A player can also change a display name, so a name is not a durable identity.
Kick by userid
kickid <userid> "<reason>" targets the numeric userid returned by status. This is safer for scripts and for servers where names are duplicated or difficult to type. The userid belongs to the current connection, so obtain a fresh value after a reconnect. Include a short reason when your server’s moderation policy calls for one.
Ban by SteamID or IP address
banid <minutes> <steamid> bans the account identified by its SteamID. A value of 0 is documented as a permanent ban. Use a positive number for a timed ban. banip <minutes> <ip> bans an IP address instead; IP bans can affect other users on the same network and can be bypassed by a changed address, so use them deliberately.
Remove and persist bans
Use removeid <steamid> to remove a SteamID ban or removeip <ip> to remove an IP ban. The ban is initially held in memory. Run writeid or writeip after adding or removing entries so the lists are written to disk and survive a server restart. A successful kick or an in-memory ban is not proof that the action will still exist after a restart.
| Purpose | Command | Important qualification |
|---|---|---|
| List players | status |
Returns current userids and SteamID details. |
| Kick by name | kick "<name>" |
Less precise with duplicate, complex, or impersonating names. |
| Kick by connection | kickid <userid> "<reason>" |
Userid is temporary and comes from status. |
| Ban an account | banid <minutes> <steamid> |
0 is documented as permanent. |
| Ban an address | banip <minutes> <ip> |
May affect other users behind the address and may not be durable against address changes. |
| Unban an account | removeid <steamid> |
Write the updated list afterward. |
| Unban an address | removeip <ip> |
Write the updated list afterward. |
| Save account bans | writeid |
Persists the in-memory SteamID list. |
| Save IP bans | writeip |
Persists the in-memory IP list. |
How do I change the map and load a server configuration?
Use changelevel for an immediate switch, nextlevel to choose what loads after the current map, and exec for a configuration file stored under tf/cfg.
Map control
changelevel <map>changes maps immediately and can interrupt an active round.nextlevel <map>sets the map that follows the current one.mapslists maps installed on the server, which helps avoid spelling a map that is not present.
Use maps before scheduling a change when you are unsure of the exact filename. Copy the map name exactly, then announce an immediate change so players are not surprised. A map change does not restart the dedicated-server process, although the transition can reset or reload session state.
Configuration files
exec <file> loads a configuration file from the server’s tf/cfg directory. Recurring settings belong in tf/cfg/server.cfg; use a one-shot console command when you only need a temporary change. Keep backups of edited configuration files so a bad line can be removed quickly. If a setting appears to revert after a restart, check whether server.cfg is applying its old value again.
Round and team controls
mp_timelimit <minutes>sets the map time limit. The documented default is 30.mp_restartgame <seconds>restarts the game after the specified delay.mp_scrambleteamsscrambles the teams immediately.
Use mp_restartgame and mp_scrambleteams between rounds when possible. Both affect everyone currently playing, so explain the reason before applying them during an event.
Which TF2 match and gameplay commands are useful?
These convars change server-wide rules. Put values you want on every restart in server.cfg; temporary tournament or event changes can be entered through the console and reverted afterward. A convar changed for one match does not automatically become a permanent policy.
| Command | Effect |
|---|---|
mp_timelimit <minutes> |
Controls minutes before map time expires; the documented default is 30. |
mp_winlimit <number> |
Sets the round-win condition for modes that use a win limit. |
mp_maxrounds <number> |
Sets the maximum number of rounds before the map ends. |
mp_friendlyfire 0|1 |
Disables or enables teammate damage. |
mp_autoteambalance 0|1 |
Disables or enables automatic team balancing. |
mp_teams_unbalance_limit <number> |
Sets the tolerated difference in team size. |
mp_forcecamera <value> |
Can restrict deathcam viewing to the player’s team when enabled. |
mp_disable_respawn_times 1 |
Enables instant respawn behavior. |
sv_alltalk 1 |
Allows cross-team voice chat. |
sv_pure 1 |
Restricts client-side custom content according to the server’s pure settings. |
sv_gravity <value> |
Changes world gravity; the documented default is 800. |
Binary settings use 0 for off and 1 for on where shown. For a reversible event setup, write down the previous values, apply the temporary commands, and restore those values afterward. Because these settings apply to the session rather than one player, announce disruptive changes before applying them. A value in server.cfg can also override a temporary adjustment when the server restarts or when that file is executed again.
Why does tf_bot_add do nothing?
Bot commands must reach the server. Use the server console, an authenticated RCON command such as rcon tf_bot_add 4 blue normal, or a connected hosting panel console. Entering tf_bot_add only in a client console without RCON will not add server bots.
Add and remove bots
tf_bot_add <count> [class] [team] [difficulty]adds TFBots. The documented example istf_bot_add 4 blue normal.tf_bot_kick <name|all>removes one named TFBot or all TFBots.tf_bot_quota <n>maintains a target bot count rather than performing a one-time addition.tf_bot_difficulty 0-3selects the documented difficulty range from easy through expert.
Optional arguments let you control the class, team, and difficulty, but the command still depends on a valid server context. If you want the server to maintain a population, use tf_bot_quota; repeated tf_bot_add commands are one-time additions and do not establish a target.
Capacity and map limitations
Valve Support notes that bot count is constrained by server capacity and that some maps do not support bots. If the command is accepted but no bot appears, check free player slots, the map’s bot support, and the server console for an error before changing syntax. Also verify that you did not send the command to your local client instead of the server.
Which TF2 commands need sv_cheats?
Set sv_cheats 1 only on a private or test server before using cheat-protected commands. The setting is server-wide and can affect every player in the session.
| Command | Use | Operational warning |
|---|---|---|
noclip |
Fly and pass through walls. | Changes movement for the user who runs it while cheats are enabled. |
god |
Provides invulnerability. | Not suitable for a public match. |
buddha |
Allows damage without dying. | Use only for controlled testing. |
nav_generate |
Generates a navigation mesh. | Can be disruptive and should be run during maintenance. |
Cheats are not a per-admin permission in vanilla RCON. Once enabled, the server permits cheat-protected behavior for the session, so schedule testing when no public match is running. When testing is complete, run sv_cheats 0 and verify the value with sv_cheats. Do not assume that disabling cheats restores every temporary gameplay change; review other convars you altered.
What is the difference between vanilla RCON and SourceMod?
Vanilla TF2 accepts built-in RCON commands without extra software. SourceMod is an optional plugin framework that adds SteamID-based permissions, menus, persistent moderation features, and sm_ commands; those commands do not exist on a stock server. “RCON works out of the box, SourceMod does not,” as GameServerKings put it in its September 28, 2026 TF2 command guide.
| Administration approach | Access method | Permission scope | Persistence | Dependency | Main risk |
|---|---|---|---|---|---|
| Dedicated-server console | Local access to the server process | Full server control | One-shot unless saved in configuration or ban files | Stock TF2 dedicated server | Accidental global changes or exposing the console |
| Vanilla RCON | One shared RCON password | All-or-nothing control for anyone with the credential | Commands are temporary unless placed in server.cfg or written to disk |
Stock TF2 dedicated server | Password theft and unrestricted commands |
| SourceMod | SteamID-based administrator permissions | Can grant different commands and menus to different admins | Plugin configuration and persistent admin data | Installed SourceMod stack and compatible plugins | More components to update, configure, and troubleshoot |
The official SourceMod site listed version 1.12 as the stable recommended release on October 20, 2024. That status can change, so check the current release information before installing. SourceMod is a dependency choice, not a replacement for understanding the underlying console: the server still has its console and RCON interface after the plugin is installed.
A community that needs several moderators with different powers generally benefits from granular permissions; a private server with one trusted operator may need only the stock console and RCON. Keep the RCON password restricted even when SourceMod handles routine staff commands, because RCON remains unrestricted server access.
How do I make administration changes survive a restart?
Separate repeatable configuration from temporary actions. Put recurring convars such as team balance, voice, gravity, or time limits in tf/cfg/server.cfg. Use exec server.cfg after editing if you need to reload the file without restarting. Keep a known-good backup so you can recover from a typo or an unwanted setting.
Ban entries require their own persistence step: run writeid for SteamID bans and writeip for IP bans. A restart can therefore expose two different problems: a convar may be reset because it was never placed in server.cfg, or a ban may disappear because the corresponding write command was never issued. Check both the configuration file and the ban-list write step when auditing persistence.
What can go wrong with TF2 administration commands?
- “Unknown command” or no visible effect: confirm that the command was sent to the server console or prefixed with
rconfrom a client. - RCON rejects the command: re-enter
rcon_password, check the server’s configured password, and ensure you are connected to the intended server. - The wrong player is kicked: use
statusandkickidrather than relying on a similar display name. - A userid no longer works: run
statusagain because userids can be reassigned after a reconnect. - A ban disappears after restart: issue the matching
writeidorwriteipcommand after changing the ban list. - A map change fails: run
mapsand copy an installed map name exactly. - A setting reverts: inspect
server.cfg; it may be reapplying a previous value on startup or after anexec. - Bots will not join: verify server capacity, map support, and that the command reached the server through RCON or a server console.
- A test command affects everyone: remember that
sv_cheatsand many gameplay convars are server-wide; test privately and restore the values afterward. - Staff need different powers: vanilla RCON cannot provide granular roles; use SourceMod and SteamID-based permissions instead of sharing one unrestricted password.
Which administration setup should a TF2 server use?
Choose the smallest system that matches your staff and risk profile. Team Fortress 2 is free-to-play, so the administrative cost is normally the server service and any optional software support rather than a separate game purchase.
- One trusted operator: use the dedicated console or a unique RCON password, keep recurring settings in
server.cfg, and write ban files after moderation. - Several moderators with different responsibilities: install and maintain SourceMod so each SteamID can receive limited permissions instead of sharing unrestricted RCON.
- Public testing or bot development: use a private server, enable cheats only for the test, document changed convars, and disable cheats before inviting players.
- Managed hosting: use the provider’s authenticated console for routine commands and protect panel accounts as carefully as RCON credentials. A hosted panel is convenient, but it does not remove the need to understand map, ban, bot, and persistence commands.
A safe first-day administration checklist
- Confirm whether you are using a dedicated console, remote client RCON, or a managed panel.
- Set a unique RCON password and limit it to trusted operators.
- Run
statusto verify that commands reach the intended server. - Test one harmless setting, such as a temporary time limit, before making a map change.
- Place recurring values in
tf/cfg/server.cfgand keep a backup. - After a ban or unban, run the matching
writeidorwriteipcommand. - Use SteamIDs for durable moderation decisions and userids only for the current connection.
- Reserve
sv_cheats 1and navigation generation for private maintenance sessions. - If multiple staff members need different abilities, plan a SourceMod permission setup rather than distributing the RCON credential.
Frequently Asked Questions
Can I run TF2 RCON commands from the Steam chat box?
No. RCON is sent through the developer console or a server-management panel, not normal in-game text chat. Chatting a command only displays text to players and does not authenticate you with the server.
Does changing a map with RCON restart the dedicated server?
No. changelevel changes the loaded map while the server process continues running. Player connections and temporary convar values can be affected by the transition, so schedule disruptive changes between matches when possible.
Are TF2 userids permanent identifiers?
No. A userid identifies a current connection and can be reassigned after a player leaves and rejoins. Use the SteamID shown by status when the moderation decision must persist across reconnects.
Can SourceMod and vanilla RCON be installed together?
Yes. SourceMod adds a permission and plugin layer while the underlying server still has its console and RCON interface. Keep the RCON password restricted even when SourceMod handles routine staff commands, because RCON remains unrestricted server access.
Why did a cheat command stop working after I disabled cheats?
Commands protected by sv_cheats are blocked once the convar returns to zero. Re-enable cheats only on a private test session, perform the test, then disable them before public play.
Why does my map command say the map is missing?
Run maps on the server and choose a name from the installed list. A remote client must send rcon changelevel <map>; typing changelevel without RCON affects only the client context, not the remote server.
What should I use for a temporary moderation action?
Run status, note the current userid, and use kickid <userid>. If the action must survive a reconnect, use the SteamID with banid and then run writeid.
Why did my bot quota not fill the server?
tf_bot_quota is limited by available server capacity, and some maps do not support bots. Confirm free slots, map support, and that the command was sent through the server console, RCON, or an authenticated panel.
Do I need SourceMod to run a TF2 server?
No. Stock TF2 includes the dedicated console and RCON. SourceMod is optional and is useful when you need SteamID-based roles, menus, and persistent moderation features.
The Bottom Line
Use the server console or authenticated RCON for stock TF2 administration, identify players with status, persist bans with writeid/writeip, store recurring settings in tf/cfg/server.cfg, and reserve sv_cheats for private testing. Add SourceMod only when you need granular permissions for multiple staff members.