graindrop
Watches a Dropbox folder for new audio files, transcribes them, and serves audio and transcript via MCP tools and resources.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@graindroplist new recordings"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
graindrop
Audio capture pipeline. Listens for audio files, transcribes via whisper.cpp, and serves audio + transcript through an MCP server.
Audio file → graindrop → whisper.cpp → manifest.json → MCP server (:8648)Any MCP-compatible agent (Hermes, Claude Code, Cursor, etc.) connects to the graindrop MCP and discovers new recordings as they land.
One-sentence pitch
A self-contained daemon that watches a directory, transcribes anything that lands in it, and presents the results to any AI agent through a standard protocol — no cloud, no subscriptions, no vendor lock-in.
Related MCP server: io.github.chicogong/ffvoice
How it works
Drop an audio file (
.m4a,.wav,.mp3) into the watched directorygraindrop copies it to
audio/, transcribes via whisper.cpp totranscripts/, archives the original to_archive/, and logs it inmanifest.jsonThe MCP server exposes the recording to any connected agent through tools and resources
The agent reads the transcript, fetches the audio, and does what it does
Quick start
# Install
pip install graindrop
# or from source:
git clone https://github.com/stuartmhannon/graindrop
cd graindrop
pip install -e .
# Start the MCP server
graindrop-mcp --port 8648
# The server watches ~/Dropbox/graindrop/ by default
# Drop an .m4a in there and the MCP server picks it upMCP Tools
Tool | Purpose |
| List all recordings, newest first |
| List only unacknowledged recordings |
| Full transcript text for a recording |
| Audio file path for a recording |
| Mark a recording as read |
| Summary counts |
MCP Resources
URI | Content |
| Plain text transcript |
| Binary audio (m4a/wav) |
Configuration
graindrop-mcp --port 8648 --dir ~/grain/reference/graindrop--port: HTTP SSE port (default: 8648)--dir: Data directory (default:~/grain/reference/graindrop)
The watched directory defaults to ~/Dropbox/graindrop/. Override by editing WATCH_DIR in graindrop_mcp.py.
Storage layout
~/grain/reference/graindrop/
├── audio/{slug}.{ext} ← canonical audio copy
├── transcripts/{slug}.txt ← whisper transcript
├── _archive/{original} ← source file backup
├── manifest.json ← searchable index
├── graindrop_mcp.py ← MCP server
├── graindrop_watcher.py ← processing scriptRequirements
Python 3.10+
whisper.cpp (for transcription)
ffmpeg (for audio conversion)
mcp[cli](installed automatically)
Agent integration
Hermes Agent
Add to ~/.hermes/config.yaml:
mcp_servers:
graindrop:
url: http://127.0.0.1:8648/sse
transport: sseAny MCP client
Connect to http://127.0.0.1:8648/sse using the MCP protocol's HTTP SSE transport. Call tools/list to discover available tools, then tools/call to invoke them.
License
MIT — do what you want, just don't blame us.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/stuartmhannon/graindrop'
If you have feedback or need assistance with the MCP directory API, please join our Discord server