Selectors expand to the matched names when the command runs: /say Welcome @p prints Welcome Steve.
Run from the dedicated server console.
The name in brackets is the sender: a player's name, [Server] from the console, or [@] from a command block.
/say needs operator permission level 2: operators, command blocks, functions and the server console can run it. Selectors in the message expand to the matched names when the command runs.
/say always prints plain white text with the [sender] prefix. If the broadcast needs colors, bold text, hover tooltips or click actions, use /tellraw instead: it takes JSON text components and drops the prefix. This is your exact message as a tellraw command:
Selectors in the message become selector components, which expand to names the same way. Add color and formatting keys in the Tellraw Command Generator.
/say broadcasts a plain text message to every player on the server. The line appears in chat with the sender's name in square brackets, such as [Server] from the console or [Steve] from a player, and it needs operator permission level 2 to run.
The command could not be simpler on the surface: /say followed by anything you want the whole server to read. Everything after the first space is the message, sent as one white chat line to every player online. That makes it the standard way to announce restarts, events and winners on servers, and a quick way to push status lines from command blocks and datapack functions.
The detail people miss is the [sender] prefix. /say always prints who sent the message: the server console shows [Server], a player shows their own name, and a command block shows [@] because command blocks are named @ by default. Rename a command block in an anvil before placing it and the prefix changes to that name, which is a cheap way to brand broadcasts as [Quest], [Arena] or anything else without touching /tellraw.
The message argument also accepts target selectors. Any @p, @a, @r, @s or @e written in the text, including argument forms like @a[team=red], expands to the names of whatever it matches when the command runs. /say Welcome @p to the server greets the nearest player by name, and a selector that matches several entities prints a list of all of them.
The full syntax is /say <message>, one greedy argument that runs to the end of the line:
Two practical limits apply. Chat input holds at most 256 characters including the command itself, while a command block accepts up to 32,500, so very long announcements belong in a command block. And a message containing @s only works when an entity runs the command; from a command block or the console @s matches nothing and the command fails.
Five ready-to-use broadcasts. Copy any of them and adjust the text:
The classic restart warning. From the console it prints [Server] Server restarting in 5 minutes.
@p expands to the nearest player's name, so everyone sees something like Welcome Steve to the server.
Selector arguments work inside the message: @a[team=red] expands to every player on team red.
@r picks one random player on the server, handy for giveaways and drawings.
Square brackets in the message are plain text, so you can add your own [Event] style tags after the sender prefix.
Minecraft has three main chat commands, and picking the right one saves work:
Use /say when the whole server should read it and plain text is enough. Switch to /tellraw when the message needs colors, clickable links or should reach only some players; the tool above converts your message to a starting tellraw command automatically. Use /msg (or its aliases /tell and /w) for private whispers, which every player can send without OP. There is also /me for italic action lines like a roleplay emote, at permission level 0.
/say broadcasts a plain text chat message to every player on the server. The message is prefixed with the sender's name in square brackets, so the console prints [Server], a player prints their own name and a command block prints [@]. Target selectors written inside the message expand to the matched names when the command runs.
Yes. /say requires permission level 2, so regular players cannot run it from chat. Operators, command blocks, datapack functions and the server console all can. In singleplayer you need cheats enabled, either from world creation or by opening to LAN with cheats on.
/say sends one plain white line to everyone and always carries the [sender] prefix. /tellraw lets you pick who receives the text and takes a JSON text component, which supports colors, bold, italics, hover tooltips and click actions, with no prefix. Use /say for quick broadcasts and /tellraw when the message needs formatting or a limited audience.
Command blocks are named @ by default, and /say always prints the sender's name in brackets, so a command block broadcast appears as [@] message. Rename the command block in an anvil before placing it and the prefix uses that name instead, for example [Quest] or [Arena].
Not in Java Edition. The chat box rejects the section sign used by legacy color codes and /say has no formatting syntax of its own, so the message always prints as plain white text. For colored or styled broadcasts use /tellraw with a JSON text component, which supports named colors, hex colors, bold, italics and more.
Write a target selector where the name should appear: /say Welcome @p to the server prints Welcome Steve to the server when Steve is the nearest player. All selectors work, including argument forms like @a[team=red], and a selector that matches several entities expands to a list of their names.
Need colors and clickable text instead? Or browse more Minecraft tools: