Fixed the "read-only file system" error in Claude Desktop by adding support for filesystem permissions configuration.
- ✅ Added
OUTFILE_DIRenvironment variable (defaults toprocess.cwd()) - ✅ Updated file path handling to use
join(OUTFILE_DIR, filename) - ✅ Added support for both absolute and relative paths
- ✅ Backward compatible with Cursor (no breaking changes)
- ✅ MCP_SETUP.md - Added Claude Desktop
allowedDirectoriesconfiguration - ✅ README.md - Separate configs for Cursor vs Claude Desktop
- ✅ env.example - Added
OUTFILE_DIRdocumentation - ✅ CURSOR_CONFIG_EXAMPLE.json - Added Claude Desktop notes
- ✅ CLAUDE_DESKTOP_CONFIG_EXAMPLE.json - New dedicated example (NEW FILE)
- ✅ CLAUDE_DESKTOP_SETUP.md - Comprehensive setup guide (NEW FILE)
- ✅ CHANGES_SUMMARY.md - This file (NEW FILE)
- ✅ All 61 tests pass
- ✅ No breaking changes
- ✅ Build successful
-
Create directory:
mkdir -p ~/Documents/Transcripts -
Edit config:
~/Library/Application Support/Claude/claude_desktop_config.json{ "mcpServers": { "audio-transcription": { "command": "npx", "args": ["-y", "audio-transcription-mcp"], "env": { "OPENAI_API_KEY": "sk-your-key-here", "INPUT_DEVICE_NAME": "BlackHole", "OUTFILE_DIR": "/Users/yourname/Documents/Transcripts" }, "allowedDirectories": [ "/Users/yourname/Documents/Transcripts" ] } } } -
Restart Claude Desktop
-
Test: Say "Start transcribing audio"
No changes needed! Cursor continues to work exactly as before:
{
"mcpServers": {
"audio-transcription": {
"command": "npx",
"args": ["-y", "audio-transcription-mcp"],
"env": {
"OPENAI_API_KEY": "sk-your-key-here",
"INPUT_DEVICE_NAME": "BlackHole"
}
}
}
}- No
OUTFILE_DIRrequired (defaults to current directory) - No
allowedDirectoriesneeded (Cursor has broader permissions) - All existing configs continue to work
-
OUTFILE_DIREnvironment Variable- Specifies where transcript files should be written
- Defaults to
process.cwd()for backward compatibility - Required for Claude Desktop filesystem access
-
allowedDirectoriesConfiguration- Claude Desktop security feature
- Grants MCP server write access to specific directories
- Must match the path in
OUTFILE_DIR
-
Path Handling
- Files are written to
join(OUTFILE_DIR, filename) - Supports both absolute and relative paths
- Handles timestamped filenames correctly
- Files are written to
Transcripts are now saved to:
- Cursor: Current working directory (as before)
- Claude Desktop:
OUTFILE_DIR(e.g.,~/Documents/Transcripts/)
Each session gets a unique timestamped filename for privacy/isolation.
Check that everything works:
# 1. Verify build
npm run build
# 2. Run tests
npm test
# 3. Check dist files
ls -la dist/
# 4. Test in Claude Desktop
# Say: "Start transcribing audio and show me the status"Modified:
src/mcp-server.ts
MCP_SETUP.md
README.md
env.example
CURSOR_CONFIG_EXAMPLE.json
Created:
CLAUDE_DESKTOP_CONFIG_EXAMPLE.json
CLAUDE_DESKTOP_SETUP.md
CHANGES_SUMMARY.md
Built:
dist/mcp-server.js (updated)
dist/mcp-server.d.ts (updated)
- Test in Claude Desktop with the new configuration
- Publish to npm so others can use with
npx - Update CHANGELOG.md with version bump
- Consider adding to official Claude Desktop MCP server directory
- See CLAUDE_DESKTOP_SETUP.md for detailed setup
- See MCP_SETUP.md for complete documentation
- See GETTING_STARTED.md for prerequisites