# Enhanced Tool Registry
The Enhanced Tool Registry provides advanced capabilities for managing MCP tools, including automatic discovery, categorization, versioning, and dynamic loading.
## Features
### 1. Automatic Tool Discovery
The registry can automatically discover and load tools from specified directories:
```typescript
const registry = new EnhancedToolRegistry(server);
const discoveredTools = await registry.discoverTools({
directories: ['./src/tools', './plugins'],
patterns: ['*.tool.js', '*.tool.mjs'],
recursive: true,
});
```
### 2. Tool Metadata
Tools can include metadata for better organization:
```typescript
export const toolDefinition: EnhancedToolDefinition = {
name: 'my_tool',
description: 'My awesome tool',
handler: myHandler,
metadata: {
category: 'analytics',
version: '1.2.0',
tags: ['stable', 'fast'],
enabled: true,
},
};
```
### 3. Category and Tag Filtering
Tools can be filtered by categories and tags:
```typescript
// Get all analytics tools
const analyticsTools = registry.getToolsByCategory('analytics');
// Get all stable tools
const stableTools = registry.getToolsByTag('stable');
// Discover only specific categories
await registry.discoverTools({
includeCategories: ['core', 'analytics'],
excludeTags: ['experimental', 'deprecated'],
});
```
### 4. Dynamic Tool Management
Tools can be enabled, disabled, and reloaded at runtime:
```typescript
// Disable a tool
registry.disableTool('experimental_tool');
// Enable a tool
registry.enableTool('experimental_tool');
// Reload a tool from its file
await registry.reloadTool('my_tool');
```
## Tool Plugin Format
Tools can be structured as plugins for automatic discovery:
```typescript
// my-tool.tool.ts
import { z } from 'zod';
import { EnhancedToolDefinition } from '../server/tool-registry-enhanced.js';
export const toolSchema = {
name: 'my_tool',
description: 'Tool description',
inputSchema: z.object({
// Input schema
}),
outputSchema: z.object({
// Output schema
}),
};
export const handler = async (params) => {
// Tool implementation
};
export const toolDefinition: EnhancedToolDefinition = {
...toolSchema,
handler,
metadata: {
category: 'utilities',
version: '1.0.0',
tags: ['stable'],
enabled: true,
},
};
export default toolDefinition;
```
## Configuration
Tool discovery can be configured based on environment:
```typescript
// tool-discovery.config.ts
export const productionToolDiscoveryConfig = {
directories: ['./src/tools'],
excludeTags: ['experimental', 'development'],
includeCategories: ['core', 'analytics', 'security'],
};
export const developmentToolDiscoveryConfig = {
directories: ['./src/tools', './src/tools/dev'],
excludeTags: ['deprecated'],
};
```
## Categories and Tags
### Standard Categories
- `core` - Essential tools for basic functionality
- `analytics` - Data analysis and metrics tools
- `security` - Security scanning and vulnerability tools
- `compliance` - Compliance and regulatory tools
- `utilities` - Helper and utility tools
- `integration` - Third-party integration tools
- `monitoring` - Monitoring and observability tools
### Standard Tags
- `stable` - Production-ready tools
- `beta` - Tools in beta testing
- `experimental` - Experimental features
- `deprecated` - Tools scheduled for removal
- `fast` - Tools with quick response times
- `slow` - Tools that may take longer to execute
- `requires-auth` - Tools requiring authentication
- `development` - Development-only tools
- `test` - Test tools
## Usage Example
```typescript
import { EnhancedToolRegistry } from './tool-registry-enhanced.js';
import { getToolDiscoveryConfig } from './config/tool-discovery.config.js';
// Create registry
const registry = new EnhancedToolRegistry(server);
// Register core tools with metadata
registry.registerEnhancedTool({
name: 'core_tool',
description: 'A core tool',
handler: coreHandler,
metadata: {
category: 'core',
version: '1.0.0',
tags: ['stable', 'fast'],
},
});
// Discover additional tools
const config = getToolDiscoveryConfig();
const discovered = await registry.discoverTools(config);
// Get tool information
const toolsInfo = registry.getToolsInfo();
console.log(`Total tools: ${toolsInfo.length}`);
console.log(`Categories: ${registry.getCategories()}`);
console.log(`Tags: ${registry.getTags()}`);
// Filter tools
const securityTools = registry.getToolsByCategory('security');
const betaTools = registry.getToolsByTag('beta');
```
## Best Practices
1. **Use Standard Categories**: Stick to the predefined categories for consistency
2. **Version Your Tools**: Include version information in metadata
3. **Tag Appropriately**: Use tags to indicate tool status and requirements
4. **Environment-Specific Loading**: Configure different tools for different environments
5. **Document Tool Requirements**: Clearly document any special requirements in the tool description
## Migration Guide
To migrate existing tools to the enhanced format:
1. Add metadata to existing tool definitions
2. Move tools to a dedicated directory (e.g., `src/tools`)
3. Rename files to match discovery patterns (e.g., `*.tool.js`)
4. Export tool definitions using the standard format
5. Update server initialization to use enhanced registry
## Benefits
- **Better Organization**: Tools are categorized and tagged
- **Dynamic Loading**: Tools can be loaded without code changes
- **Environment Control**: Different tools for different environments
- **Runtime Management**: Enable/disable tools without restart
- **Plugin Architecture**: Easy to add new tools as plugins
- **Discovery**: Automatic tool discovery from directories