fix(mcp): Fix three critical bugs in beads MCP plugin

This PR fixes three bugs that prevented the MCP plugin from working:

1. **Fixed parameter name mismatch in tools.py**
   - Changed `workspace_root=workspace_root` to `working_dir=workspace_root`
   - The `create_bd_client()` function expects `working_dir` parameter,
     but tools.py was passing `workspace_root`
   - This caused "got an unexpected keyword argument 'workspace_root'" error

2. **Added version check guard for daemon client**
   - Added `hasattr(_client, '_check_version')` check before calling
   - BdDaemonClient doesn't have `_check_version()` method, only BdCliClient does
   - This caused "'BdDaemonClient' object has no attribute '_check_version'" error

3. **Implemented proper daemon socket detection for fallback**
   - Added synchronous socket file existence check before creating daemon client
   - Walks up directory tree looking for `.beads/bd.sock` file
   - Only creates daemon client if socket exists, otherwise falls back to CLI
   - Previously, daemon client was created but failed on first method call
   - This enables the documented "prefer_daemon with automatic CLI fallback" behavior

**Testing:**
- Verified MCP tools work correctly with single-repo setup
- Confirmed automatic fallback to CLI when daemon isn't running
- Tested on macOS with bd v0.9.9

**Related Issues:**
- Addresses symptoms similar to #65 (Windows BEADS_WORKING_DIR issue)
This commit is contained in:
Michael Shuffett
2025-10-17 21:16:19 -07:00
parent c6ce88ebc7
commit 74b460b298
2 changed files with 36 additions and 12 deletions

View File

@@ -51,12 +51,13 @@ async def _get_client() -> BdClientBase:
_client = create_bd_client(
prefer_daemon=use_daemon,
workspace_root=workspace_root
working_dir=workspace_root
)
# Check version once per server lifetime
# Check version once per server lifetime (only for CLI client)
if not _version_checked:
await _client._check_version()
if hasattr(_client, '_check_version'):
await _client._check_version()
_version_checked = True
return _client