Skip to main content
Glama

Otohiroi MCP

English | 日本語

Otohiroi (音拾い, "picking up sounds") gives Claude Code, Cursor, Claude Desktop and other MCP clients a way to find free sound effects and BGM for your game. Ask for "a short metal sword hit" or "a calm chiptune loop". The agent searches, you choose by ear, and the file lands in your project with its license on record.

Otohiroi is an index and a helper. It hosts no audio. Files come from their original sources to your machine.

"a short metal sword hit"
  └─ search_sounds     keywords, length, loop, license
  └─ audition_sounds   a numbered listening page, because the agent cannot hear
  └─ fetch_sound       trim, match loudness, convert, write CREDITS.md and sounds.license.json

Install

Needs uv. ffmpeg is optional and enables conversion and loudness matching.

claude mcp add otohiroi -- uvx --from git+https://github.com/koyomivanp/otohiroi-mcp otohiroi

Other clients:

{"mcpServers": {"otohiroi": {"command": "uvx", "args": ["--from", "git+https://github.com/koyomivanp/otohiroi-mcp", "otohiroi"]}}}

Related MCP server: strongerfx

Tools

Tool

What it does

open_sound_studio

Detects a JavaScript or TypeScript game's beeps and opens a local page: tick sounds, pick replacements by ear, apply them to the game, undo at any time. Replacements are synthesised, so they need no audio files or keys.

find_replacements

Finds the sounds a JavaScript or TypeScript game makes with oscillators, then opens one listening page of natural replacements, grouped by event. Changes nothing in the game.

scan_game

Lists those oscillator sounds and where each one is triggered.

suggest_search

Turns a game event or a Japanese sound word (シュッ, ぽよん) into searches that work.

search_sounds

Searches online indexes and your packs. Filters by kind, length, loop and license. CC0 only by default.

get_sound

Returns the full record of one sound.

audition_sounds

Opens a local page with up to 12 numbered players.

fetch_sound

Saves a sound to your project and records its license.

add_pack

Registers a folder, zip or file you downloaded, so it can be searched and fetched.

list_packs

Lists your packs and shows whether Freesound downloads are on.

find_elsewhere

Builds search links for libraries you browse yourself.

Sources

Source

Search

Listen

Download

Freesound (through Openverse)

No key

Yes

With your own free FREESOUND_API_KEY (192 kbps preview). Otherwise you get the page link.

Jamendo (through Openverse)

No key

Yes

Page link

Wikimedia Commons (through Openverse)

No key

Yes

Automatic

Your packs, such as Kenney

Local

Yes

Automatic

Niconi Commons, YouTube Audio Library, OpenGameArt, Pixabay

Link only

On their sites

By hand, then add_pack

Otohiroi follows each library's rules, even when that makes it less convenient.

  • YouTube Audio Library: YouTube's terms forbid automated access and downloading outside what the service provides, and its help pages only cover use in YouTube videos.

  • Niconi Commons: there is no public API and conditions differ per item. Its terms also limit the licensed territory to Japan, so a game sold abroad needs extra care. Use add_pack with region="JP" to keep that on record.

  • OpenGameArt and Kenney: their robots.txt files turn away AI agents. Download in your browser, then use add_pack.

Using the sounds responsibly

Licenses come from what uploaders declared. Otohiroi flags names that suggest borrowed audio, but it cannot prove that a sound is clean, and this is not legal advice. Check anything important before you ship.

Freesound's API is free for non-commercial use, and its terms say commercial use is negotiated separately. Whether fetching sounds for a game you sell counts is not stated, so ask Freesound if that matters to you.

Settings

Variable

Effect

FREESOUND_API_KEY

Your own key from Freesound. Never share it.

OTOHIROI_HOME

Where packs and listening pages are kept.

Development

uv sync
uv run pytest

License

Code: MIT. Each sound keeps its own license.

Inspired by Sozai Search MCP. Otohiroi is independent and is not affiliated with or endorsed by any library named here.

Available Tools

11 tools
add_packB

Register a folder, .zip or audio file the user already downloaded so it can be searched and fetched.

A CC0 license file is detected. Otherwise pass license (cc0, by, by-sa, or a label such as niconi-commons) and, for labels, commercial_use as stated by the source. Pass region='JP' for licenses limited to Japan.

Inputs: path (required), name, note, author, +4 more.

audition_soundsB

Make a local listening page numbering up to 12 candidates and open it, so the user can choose by ear.

Inputs: sound_ids (required), label, open_browser.

fetch_soundB

Save a sound into a project folder (absolute path) and record its license in CREDITS.md and sounds.license.json.

By default it trims silence from one-shot effects and matches loudness. Set FREESOUND_API_KEY to enable Freesound. May return status manual_download_needed with a page for the user to open.

Inputs: dest (required), sound_id (required), format, normalize, +3 more.

find_elsewhereC

Search links, with what to check, for libraries a person must browse themselves (Niconi Commons, YouTube Audio Library and others).

Inputs: query (required), kind.

find_replacementsA

Scan a game for oscillator sound effects, search natural replacements for each, and open one page grouped by event.

Music is left out. events limits it to those names. Nothing in the game is changed. Events listed under needs_your_words had no dictionary entry: read their call sites and use search_sounds yourself.

Inputs: path (required), events, license, per_event, +1 more.

get_soundC

The full record of one sound: tags, license address, page link, preview address.

Inputs: sound_id (required).

list_packsB

Packs registered with add_pack, and whether Freesound downloads are enabled.

Inputs: no named parameters.

open_sound_studioA

Detect a JavaScript or TypeScript game's oscillator sound effects and open a local page to improve them.

path is the absolute path of the game's folder. The user ticks sounds, picks replacements by ear and presses apply on the page, which writes them into the game. Undo is on the same page. Music is left alone.

Inputs: path (required), open_browser.

scan_gameA

List the sounds a JavaScript or TypeScript game makes with oscillators, and where each one is triggered.

path is the absolute path of the game's folder. Nothing is changed.

Inputs: path (required).

search_soundsA

Search sound effects and BGM by English keywords across online indexes and packs added with add_pack.

license: cc0 = no conditions (default); commercial = also CC BY / BY-SA, which need credit; any = everything, including non-commercial. natural_only leaves out sounds described as beeps, synths or 8-bit. Results are short; use audition_sounds to let the user listen.

Inputs: query (required), kind, page, limit, +7 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 11 tools

    Disambiguation3/5

    Three tools (scan_game, find_replacements, open_sound_studio) all begin by detecting a game's oscillator sounds, and open_sound_studio's 'improve them' workflow is fuzzy about whether it also searches external libraries the way find_replacements does. suggest_search versus search_sounds is reasonably clear (query-building versus actual search), and get_sound/audition_sounds/fetch_sound form a clean pipeline. The scanning trio is the main source of potential misselection.

    Naming Consistency5/5

    All 11 names use snake_case with a verb-first pattern: find_replacements, list_packs, get_sound, search_sounds, audition_sounds, fetch_sound, add_pack, open_sound_studio, scan_game, suggest_search, find_elsewhere. No mixed conventions or vague bare verbs anywhere.

    Tool Count5/5

    Eleven tools sits squarely in the well-scoped range, and each covers a distinct step of the search-to-install workflow (query building, search, inspect, audition, fetch, pack management, in-game scanning). No tool looks like filler.

    Completeness4/5

    The surface covers discovery (search_sounds, suggest_search, find_elsewhere), inspection (get_sound), previewing (audition_sounds), installation with license recording (fetch_sound), plus pack and game scanning, which is solid lifecycle coverage. Gaps remain around pack/asset management: there is no remove_pack, no tool to list what has already been fetched into a project, and no way to inspect or clean up an existing project's non-oscillator audio.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Provides local MCP tools to search and retrieve CC0 sound effects by keyword, category, duration, or ID, along with metadata, previews, and WAV/MP3 download URLs.
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to search, rank, and retrieve 330 synthesized sound effects, themes, and spoken lines, and to generate ready-to-paste playback code or whole-app sound kits through a zero-dependency stdio MCP interface.
      227 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      This MCP server enables MCP clients to generate background music, instrument loops, and sound effects from plain-language prompts, then edit them (variation, inpainting, extension) and finish them into seamless loops, fades, loudness-normalized WAV/OGG/FLAC files. All generation runs locally on your own machine without cloud services or API keys, with reproducible prompt/seed metadata saved alongside each output.
      1
      MIT