|
| 1 | +# Research Summary: Tool Loading Strategies |
| 2 | + |
| 3 | +## Problem Statement |
| 4 | +Our MCP server loads 43 tools at once, which can overwhelm LLMs and make tool selection less efficient. |
| 5 | + |
| 6 | +## Research Conducted |
| 7 | +Analyzed two Microsoft MCP server implementations: |
| 8 | +1. **microsoft/azure-devops-mcp** (TypeScript) - 79 tools total |
| 9 | +2. **microsoft/mcp Azure.Mcp.Server** (C#) - 128 tools total |
| 10 | + |
| 11 | +## Key Findings |
| 12 | + |
| 13 | +### Strategy 1: Domain-based Filtering ⭐ RECOMMENDED |
| 14 | +Used by microsoft/azure-devops-mcp |
| 15 | +- **Concept:** Users select which feature domains to load |
| 16 | +- **Example:** `--domains core work-items repositories` loads only those domains |
| 17 | +- **Reduction:** Variable based on user selection (typically 50-70% reduction) |
| 18 | +- **Complexity:** Low (1-2 days implementation) |
| 19 | +- **Default:** All domains (backward compatible) |
| 20 | + |
| 21 | +### Strategy 2: Multi-tier Mode System |
| 22 | +Used by Azure.Mcp.Server |
| 23 | +- **Concept:** Three abstraction levels |
| 24 | + - Single mode: 1 unified tool |
| 25 | + - Namespace mode: 25 service-level tools (default) |
| 26 | + - All mode: 128 individual tools |
| 27 | +- **Reduction:** 81% in default mode (128 → 25) |
| 28 | +- **Complexity:** High (1-2 weeks implementation) |
| 29 | +- **Additional:** Supports consolidated intent-based grouping |
| 30 | + |
| 31 | +## Recommendation |
| 32 | + |
| 33 | +**Implement Domain-based Filtering** as Phase 1 |
| 34 | + |
| 35 | +### Why? |
| 36 | +- ✅ Quick to implement (1-2 days) |
| 37 | +- ✅ Proven successful |
| 38 | +- ✅ Perfect fit with our architecture |
| 39 | +- ✅ Backward compatible |
| 40 | +- ✅ Low risk |
| 41 | +- ✅ Can evolve later |
| 42 | + |
| 43 | +### Proposed Domains |
| 44 | +Map existing features to domains: |
| 45 | +- `core` → organizations, projects, users (4 tools) |
| 46 | +- `work-items` → work items feature (5 tools) |
| 47 | +- `repositories` → repositories feature (9 tools) |
| 48 | +- `pull-requests` → pull requests feature (7 tools) |
| 49 | +- `pipelines` → pipelines feature (8 tools) |
| 50 | +- `wikis` → wikis feature (6 tools) |
| 51 | +- `search` → search feature (3 tools) |
| 52 | + |
| 53 | +### User Experience |
| 54 | +```bash |
| 55 | +# Load only work item tools |
| 56 | +npm run start -- --domains work-items |
| 57 | + |
| 58 | +# Load core + repositories |
| 59 | +npm run start -- --domains core repositories |
| 60 | + |
| 61 | +# Load everything (default, backward compatible) |
| 62 | +npm run start |
| 63 | +``` |
| 64 | + |
| 65 | +## Next Steps |
| 66 | +1. Create `src/shared/domains.ts` with Domain enum and manager |
| 67 | +2. Update `src/index.ts` to parse domain arguments |
| 68 | +3. Modify `src/server.ts` for conditional tool registration |
| 69 | +4. Update documentation with domain usage examples |
| 70 | +5. Test with various domain combinations |
| 71 | + |
| 72 | +## Impact |
| 73 | +- **Tool reduction:** 50-90% depending on user selection |
| 74 | +- **Better LLM performance:** Fewer tools = better selection accuracy |
| 75 | +- **User control:** Users choose what they need |
| 76 | +- **Migration path:** Can upgrade to more sophisticated approaches later |
| 77 | + |
| 78 | +## Full Details |
| 79 | +See [tool-loading-strategies.md](./tool-loading-strategies.md) for complete analysis, code examples, and implementation guidance. |
0 commit comments