105 lines
3.2 KiB
Markdown
105 lines
3.2 KiB
Markdown
|
|
# Model Control Protocol (MCP) for Brainy
|
||
|
|
|
||
|
|
This document provides information about the Model Control Protocol (MCP) implementation in Brainy, which allows external models to access Brainy data and use the augmentation pipeline as tools.
|
||
|
|
|
||
|
|
## Components
|
||
|
|
|
||
|
|
The MCP implementation consists of three main components:
|
||
|
|
|
||
|
|
1. **BrainyMCPAdapter**: Provides access to Brainy data through MCP
|
||
|
|
2. **MCPAugmentationToolset**: Exposes the augmentation pipeline as tools
|
||
|
|
3. **BrainyMCPService**: Integrates the adapter and toolset, providing WebSocket and REST server implementations for external model access
|
||
|
|
|
||
|
|
## Environment Compatibility
|
||
|
|
|
||
|
|
### BrainyMCPAdapter
|
||
|
|
|
||
|
|
The `BrainyMCPAdapter` has no environment-specific dependencies and can run in any environment where Brainy itself runs, including:
|
||
|
|
|
||
|
|
- Browser environments
|
||
|
|
- Node.js environments
|
||
|
|
- Server environments
|
||
|
|
|
||
|
|
### MCPAugmentationToolset
|
||
|
|
|
||
|
|
The `MCPAugmentationToolset` also has no environment-specific dependencies and can run in any environment where Brainy itself runs, including:
|
||
|
|
|
||
|
|
- Browser environments
|
||
|
|
- Node.js environments
|
||
|
|
- Server environments
|
||
|
|
|
||
|
|
### BrainyMCPService
|
||
|
|
|
||
|
|
The `BrainyMCPService` has been refactored to separate the core functionality from the Node.js-specific server functionality:
|
||
|
|
|
||
|
|
1. **Core Functionality**: The core request handling functionality (`handleMCPRequest`) can run in any environment where Brainy itself runs. This is what remains in the main Brainy package.
|
||
|
|
|
||
|
|
2. **Server Functionality**: The WebSocket and REST server functionality is not included in the main Brainy package to keep the browser bundle lightweight and avoid Node.js-specific dependencies. In browser or other environments, you can use the core functionality through the `handleMCPRequest` method.
|
||
|
|
|
||
|
|
## Usage
|
||
|
|
|
||
|
|
### In Any Environment (Browser, Node.js, Server)
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import { BrainyData, BrainyMCPAdapter, MCPAugmentationToolset } from '@soulcraft/brainy'
|
||
|
|
|
||
|
|
// Create a BrainyData instance
|
||
|
|
const brainyData = new BrainyData()
|
||
|
|
await brainyData.init()
|
||
|
|
|
||
|
|
// Create an MCP adapter
|
||
|
|
const adapter = new BrainyMCPAdapter(brainyData)
|
||
|
|
|
||
|
|
// Create a toolset
|
||
|
|
const toolset = new MCPAugmentationToolset()
|
||
|
|
|
||
|
|
// Use the adapter to access Brainy data
|
||
|
|
const response = await adapter.handleRequest({
|
||
|
|
type: 'data_access',
|
||
|
|
operation: 'search',
|
||
|
|
requestId: adapter.generateRequestId(),
|
||
|
|
version: '1.0.0',
|
||
|
|
parameters: {
|
||
|
|
query: 'example query',
|
||
|
|
k: 5
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
// Use the toolset to execute augmentation pipeline tools
|
||
|
|
const toolResponse = await toolset.handleRequest({
|
||
|
|
type: 'tool_execution',
|
||
|
|
toolName: 'brainy_memory_storeData',
|
||
|
|
requestId: toolset.generateRequestId(),
|
||
|
|
version: '1.0.0',
|
||
|
|
parameters: {
|
||
|
|
args: ['key1', { some: 'data' }]
|
||
|
|
}
|
||
|
|
})
|
||
|
|
```
|
||
|
|
|
||
|
|
|
||
|
|
### In Browser Environment (Core Functionality Only)
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import { BrainyData, BrainyMCPService } from '@soulcraft/brainy'
|
||
|
|
|
||
|
|
// Create a BrainyData instance
|
||
|
|
const brainyData = new BrainyData()
|
||
|
|
await brainyData.init()
|
||
|
|
|
||
|
|
// Create an MCP service (server functionality will be disabled in browser)
|
||
|
|
const mcpService = new BrainyMCPService(brainyData)
|
||
|
|
|
||
|
|
// Use the core functionality
|
||
|
|
const response = await mcpService.handleMCPRequest({
|
||
|
|
type: 'data_access',
|
||
|
|
operation: 'search',
|
||
|
|
requestId: mcpService.generateRequestId(),
|
||
|
|
version: '1.0.0',
|
||
|
|
parameters: {
|
||
|
|
query: 'example query',
|
||
|
|
k: 5
|
||
|
|
}
|
||
|
|
})
|
||
|
|
```
|