Last updated: 9 October 2026 · Publisher: HUGO FM GAMES (hugo.fm)
Overview
Fart Sounds is an MCP server that plays Mr Farts fart sounds, songs and cartoons inside AI assistants. Playback tools open an embedded player (an MCP Apps interface) that plays the audio or video in the chat.
Free. Every sound, song and cartoon is free. No tool takes payment.
No account. There is no sign-in, OAuth or API key.
https://fart.shoutoutgames.com/v1, see the REST API docs
None
ChatGPT
In ChatGPT developer mode, add a custom app with the server address https://fart.shoutoutgames.com/mcp and no authentication. Then ask for a fart and tap Enable sound in the player.
Claude
In Claude, open Customize > Connectors.
Choose Add custom connector.
Enter the URL exactly: https://claude.mrfarts.io/mcp
For authentication, choose No sign-in.
Ask for a fart, then tap Enable sound in the player.
Use the Claude address exactly as shown, with no trailing slash and no query string. Claude derives the player's domain from the exact connector address. With a trailing slash or query string, the player does not load.
Any MCP client
Transport
Streamable HTTP. Send POST with Content-Type: application/json and Accept: application/json, text/event-stream. Each request gets one complete response.
Sessions
Stateless. The server does not issue an Mcp-Session-Id.
Authentication
None
Protocol versions
Answers 2025-06-18 and 2025-11-25
Player
MCP Apps resource ui://mrfarts/player/v2.html. Optional: results are usable without it.
Both addresses serve the same 13 tools, the same inputs and the same structuredContent. They differ in presentation, in the player address (mcpUrl) and in the player domain Claude needs. Claude connectors that still use /mcp get the Claude presentation too.
/mcp (ChatGPT and other clients)
claude.mrfarts.io/mcp
Tool titles
Not set
Set, for example "Play a Fart"
Result text, playback tools
What is playing, plus a suggestion
The same, plus up to 3 direct media links
Result text, browse_farts
Number of matches
The same, plus one id: title line per item
Server instructions
Written for ChatGPT
A neutral description of the tools
Tools
The model can call 9 tools. Read means the tool changes nothing. Write means the tool changes only our own anonymous player session. No tool reads or changes user accounts, sends messages, publishes anything or spends money. No tool is a sensitive write.
Tool
Access
What it does
Inputs
fart
Write
Plays a fart: random by default, or a named sound, animal, person-name joke, seasonal pack, extreme, fart of the day, or 1–100 sounds in a row.
Plays a Mr Farts song by title, catalogue ID or at random.
selection, locale, timezone
play_fart_cartoon
Write
Plays a Mr Farts cartoon video by title, catalogue ID or at random.
selection, locale, timezone
start_fart_countdown
Write
Shows a countdown in the player, then plays a fart.
seconds, locale, timezone
fart_weather
Write
Plays the Mr Farts "windy weather" joke. It does not get real weather.
locale, timezone
fart_time
Write
Shows a clock and tells the time with fart sounds.
locale, timezone
fart_prank
Write
Plays the "come closer" prank with on-screen text and sound.
locale, timezone
browse_farts
Read
Searches the catalogue and returns IDs that the playback tools accept. Does not change playback or open the player.
category, query, offset, limit, locale, timezone
show_player
Write
Reopens the player without playing anything.
locale, timezone
Inputs
Every input is optional. Input objects are strict: an unknown property is rejected with an input validation error.
Input
Type
Used by
Notes
selection
string, 1–150 characters
fart, play_fart_music, play_fart_cartoon
A catalogue ID such as sounds:24, or a name or synonym from the user. Omit for a random choice. Unknown names play a random item.
category
sounds, animal, music, cartoon, christmas, easter, halloween or valentine
fart, browse_farts
Limits the choice or the search to one pack.
personName
string, 1–100 characters
fart
First name for the person-name joke.
mode
random, extreme or daily
fart
daily is the fart of the day, picked from the date in the user's timezone.
count
integer, 1–100
fart
Number of sounds in a row. Default 1.
seconds
integer, 1–1800
start_fart_countdown
Countdown length. Default 60.
query
string, up to 150 characters
browse_farts
Search text. Empty lists the whole category.
offset
integer, 0–1000
browse_farts
Default 0.
limit
integer, 1–100
browse_farts
Default 30.
locale
string, up to 20 characters
All 9 tools
For example en-US, de-DE, fr-FR or es-ES.
timezone
string, up to 80 characters
All 9 tools
An IANA name such as Europe/London.
If locale or timezone is missing, the server uses the hints the host sends (ChatGPT sends openai/locale and openai/userLocation), then the session's saved values, then en-US and UTC.
Outputs
content: one text item. On /mcp it names what is playing and adds a suggestion, for example Here comes Wet fart! Try: "Play a wet fart!". The suggestion is picked at random.
structuredContent: text, revision, locale, timezone, playbackStatus, needsPlayer and suggestion. When relevant it also has selection (id, title, category, audioUrl, videoUrl), command (what the player should do, including the full playlist), and, for browse_farts, items and total.
_meta: sessionId, widgetToken and mcpUrl, for the player. Every model-facing tool except browse_farts returns it.
Tool annotations: readOnlyHint is true only for browse_farts. openWorldHint is false for every tool. destructiveHint is true only for control_player (see below).
Player-only tools
Four more tools exist only for the embedded player. Each one declares _meta.ui.visibility: ["app"], so hosts that render MCP Apps hide them from the model. The model never needs them. A host that does not render the player has no reason to call them.
Tool
Access
Purpose
Inputs
control_player
Write
Stops, replays or plays another item from the same pack, or turns video on or off for the next selection. The player uses it for its Home button (stop) and its Video switch. Marked destructiveHint: true because stop cancels playback.
The player claims a command before playing it, then reports what happened.
sessionId, widgetToken, instanceId, revision (integer, 1 or more), status (claimed, playing, ended, stopped, blocked, failed)
These tools need credentials from a previous result. show_player and every playback tool return sessionId, widgetToken and mcpUrl in _meta. control_player and player_request go through the host and need only sessionId. sync_player and acknowledge_playback go straight from the player to mcpUrl and also need widgetToken. Called with made-up values, they return the session-expired error.
Repeating a control_player or player_request call with the same operationId does not repeat the command. The result has duplicate: true.
Player sessions
Each player works in an anonymous session that is deleted 24 hours after it was last used. In ChatGPT, one conversation keeps one session. Claude sends no conversation identifier, so each Claude request starts a new session, and an open player switches to the newest one.
Example request and response
Request:
POST https://fart.shoutoutgames.com/mcp
Content-Type: application/json
Accept: application/json, text/event-stream
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"fart","arguments":{"selection":"wet"}}}
Response from /mcp (shortened). Clients that accept text/event-stream receive the same JSON as a single SSE event (event: message / data: …).
On claude.mrfarts.io/mcp, the same call returns the same structuredContent. The text adds the media link, and mcpUrl is https://claude.mrfarts.io/mcp:
Here comes Wet fart! Media: https://claude.mrfarts.io/media/farts/24.mp3 Try: "Play a wet fart!"
A browse_farts call with {"query":"wet","limit":3} on claude.mrfarts.io/mcp returns text like this:
4 matching items. All packs are free.
sounds:24: Wet
sounds:23: Wet and Squeaky
sounds:59: Wet and Grumpy
Try: "Play a Mr Farts cartoon!"
Example prompts
Prompt
Tool
Expected result
"Play a fart."
fart
A random fart plays. The text names it: "Here comes … fart!"
"Play a wet fart."
fart with selection: "wet"
The Wet fart (sounds:24) plays.
"Play a cow fart."
fart
The cow fart from the animal pack plays.
"Do 50 farts in a row!"
fart with count: 50
A message such as "50 farts coming your way." (the wording varies). 50 farts play in a row.
"Play a Mr Farts song."
play_fart_music
A song plays. The text says "Now Playing" and the title.
"Play a fart cartoon."
play_fart_cartoon
A Mr Farts cartoon video plays.
"Fart in 10 seconds."
start_fart_countdown with seconds: 10
"Farting will start in 10 seconds." A 10-second countdown, then a fart.
"What time is it in farts?"
fart_time
A clock, and the time told with fart sounds.
"What fart sounds do you have?"
browse_farts
A list of sounds with names and IDs. Nothing plays.
"What's the real weather in London tomorrow?"
None
Fart Sounds should not be used. fart_weather is a joke, not a forecast.
"Buy me the premium fart pack."
None
Nothing to buy. All content is free.
Errors and limits
Tool errors
Tool errors come back as a normal result with isError: true and a text message.
Situation
Message
Invalid argument (wrong type, out of range, unknown field)
Names the tool and the field, for example Input validation error: Invalid arguments for tool fart: count: Too big: expected number to be <=100
Unknown timezone
Unknown timezone. Use an IANA timezone such as Europe/Budapest.
Player session expired, or a made-up sessionId
This player session expired. Ask again to open a new player.
Wrong widgetToken
Invalid player credentials.
Another player holds playback
Another player is active.
Replay before anything played
There is nothing to replay yet. Ask for a fart first.
Same operationId used for a different command
operationId was already used for a different command.
Temporary server problem
The player service is temporarily unavailable. Retry with the same operationId.
Unknown sound, song or cartoon names are not errors. A random item from that pack plays, and the result names what played.
HTTP status codes
Status
Meaning
405
GET on the endpoint, for example when you open it in a browser. MCP clients use POST.
403
A browser request from an origin that is not allowed.
413
Request body over 100 KB.
429
Rate limit exceeded. Wait a moment and retry.
Limits
Rate limit: 15 requests per second per client IP address, with a burst of 30, on each endpoint. Over that, the server returns HTTP 429. Our server sits behind Cloudflare and currently sees Cloudflare's address, not yours, so requests that arrive through the same Cloudflare edge share one limit.
No sound. Browsers block autoplay until you interact with the page. Tap Enable sound in the player. Each new player in the chat may need its own tap.
"Audio is unavailable. Tap the player to retry." Tap the player.
Nothing loads or plays. Audio and video come from https://assets.mrfarts.tv. Check that an ad blocker, firewall or network filter is not blocking that domain.
Video does not play. The player falls back to the audio when it has an audio file. You can turn video off with the player's Video switch.
No player appears. The host does not render MCP Apps. The result still names what was chosen. On claude.mrfarts.io/mcp the text includes direct media links, and on both addresses structuredContent carries the media URLs.
"This player session expired." Ask again. A new player opens with a new session.
Several players in one chat. Players that share a session (in ChatGPT, every player in the conversation) play one at a time. Pressing a button in a player makes it the active one.
The player stops updating. It pauses while its tab is hidden and resumes when you come back.
Data and privacy
Received per call: the item you asked for, your language and timezone, and, for a name fart, the first name you typed. We receive the tool call only, not your conversation. ChatGPT also sends anonymous conversation and user identifiers, and may send a general location hint; the server reads only the timezone from it and does not store the identifiers.
Stored: an anonymous player session with the last command (including any first name typed for a name fart), language and timezone. It is deleted 24 hours after last use. In ChatGPT, the session reference is a keyed hash of ChatGPT's anonymous conversation and user identifiers. In Claude, each request gets a new random session.
Logs: our app logs record each request's status and duration only. Web server access logs (IP address, time, the address requested and client details) rotate daily and are kept for about 14 days.
Hosting: the server runs on DigitalOcean behind Cloudflare. Media is served from assets.mrfarts.tv through Cloudflare.
Not collected: accounts, email, location, contacts, payment details, microphone or camera. No advertising or analytics cookies. We do not sell your data.