Skip to main content
Glama
REVIEW-STABILITY-AND-TESTING.md5.32 kB
# REVIEW: Stability and Testing Analysis for Peekaboo-MCP ## Executive Summary **Is peekaboo-mcp 100% stable and usable as an MCP module?** - **Answer**: No, it's approximately **70% production-ready** - Core functionality is solid, but MCP protocol layer lacks testing - Recent security improvements introduce breaking changes ## Stability Assessment: 7/10 ### ✅ What's Stable 1. **File Operations** - 95%+ test coverage on fs-utils 2. **Security** - Comprehensive path traversal protection with 35 tests 3. **Search Functions** - Well-tested pattern matching and content search 4. **Error Handling** - Proper try-catch blocks throughout ### ❌ What's Not Stable 1. **MCP Protocol Layer** - Only 18.53% coverage on index.ts 2. **No Integration Tests** - Zero tests for actual MCP client interactions 3. **Memory Management** - No limits on directory size or recursion 4. **Concurrent Access** - Untested under multiple client scenarios ## Test Coverage Analysis ### Current Coverage Stats ``` File | % Stmts | % Branch | % Funcs | % Lines -------------------|---------|----------|---------|-------- fs-utils.ts | 95.65 | 89.65 | 100 | 95.65 ✅ mime-types.ts | 100 | 100 | 100 | 100 ✅ search-utils.ts | 96.46 | 97.05 | 100 | 96.46 ✅ index.ts | 18.53 | 50 | 50 | 18.53 ❌ ``` ### Critical Missing Tests #### 1. **MCP Protocol Handlers** (0% coverage) ```typescript // NOT TESTED: - server.setRequestHandler(ListResourcesRequestSchema, ...) - server.setRequestHandler(ReadResourceRequestSchema, ...) - server.setRequestHandler(ListToolsRequestSchema, ...) - server.setRequestHandler(CallToolRequestSchema, ...) ``` #### 2. **Security Feature** (Partially tested) ```typescript // findProjectRoot() - Basic tests exist but missing: - Symlinked node_modules scenarios - Monorepo/workspace detection - Permission denied scenarios ``` #### 3. **Edge Cases Not Covered** - Binary files larger than buffer size - Directories with 10,000+ files - Deeply nested structures (>100 levels) - Unicode filenames on different OS - Concurrent client requests - Malformed MCP requests ## Usability Analysis ### As an NPM Module: ✅ Good ```typescript import { createPeekabooServer, findProjectRoot } from 'peekaboo-mcp'; // Works well, but requires manual root detection now ``` ### As an MCP Server: 🟡 Functional but Limited **Working Scenarios:** - Small to medium projects (<1000 files) - Read-only file browsing - Basic search operations **Problematic Scenarios:** - Large monorepos (might access wrong project) - Global npm installation (will fail) - High-frequency requests (no rate limiting) - Long-running operations (no timeout control) ## Breaking Changes Impact The recent security update creates significant breaking changes: 1. **Before**: `PEEKABOO_ROOT=/custom/path npx peekaboo-mcp` 2. **After**: Auto-detects root, no override possible **Impact**: - ✅ More secure (prevents LLM manipulation) - ❌ Less flexible (can't specify custom directories) - ❌ Breaks existing configurations ## Production Readiness Checklist ### ✅ Ready - [x] Core file operations - [x] Path security - [x] Basic error handling - [x] Search functionality ### ❌ Not Ready - [ ] MCP protocol testing - [ ] Stress testing - [ ] Memory limits - [ ] Timeout handling - [ ] Progress notifications - [ ] Cancellation support - [ ] Concurrent client handling ## Recommendations ### Immediate Actions (Critical) 1. **Add MCP Protocol Tests** ```typescript test('ListResources returns correct structure', async () => { const response = await handleListResources(); expect(response.resources).toBeDefined(); expect(response.resources[0].uri).toMatch(/^file:\/\//); }); ``` 2. **Test Error Scenarios** ```typescript test('handles malformed URIs gracefully', async () => { const response = await handleReadResource({ uri: 'not-a-file-uri' }); expect(response.error.code).toBe(ErrorCode.InvalidRequest); }); ``` 3. **Add Integration Test** ```typescript test('full MCP client interaction', async () => { const client = new McpClient(); await client.connect(server); const resources = await client.listResources(); expect(resources).toBeDefined(); }); ``` ### Short-term Improvements 1. Implement request timeouts (30s default) 2. Add memory usage limits 3. Create stress test suite 4. Document breaking changes clearly ### Long-term Enhancements 1. Streaming for large directories 2. Progress notifications 3. Resource watching 4. Configurable ignore patterns ## Conclusion **Current State**: Peekaboo-MCP is **functionally complete** but **not fully tested** for production MCP usage. The core is solid (95%+ coverage on utilities), but the MCP integration layer needs significant testing. **Recommendation**: - **For Development**: Ready to use with awareness of limitations - **For Production**: Needs additional testing, especially MCP protocol layer - **Timeline**: ~1-2 weeks of focused testing to reach production quality The tests that exist are highly relevant and well-written, but they don't cover the actual MCP server functionality that clients will interact with. This is the primary gap preventing 100% stability.

Latest Blog Posts

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/davstr1/peekabooMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server