mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-19 11:43:56 +00:00
119 lines
3.0 KiB
Markdown
119 lines
3.0 KiB
Markdown
# Sogen MCP Server
|
|
|
|
A Model Context Protocol (MCP) server that provides AI access to the sogen userspace emulator.
|
|
|
|
## Setup
|
|
|
|
1. Install dependencies:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
2. Run the server:
|
|
```bash
|
|
npm start
|
|
```
|
|
|
|
Or for development with auto-restart:
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
## Structure
|
|
|
|
- `server.js` - Main server implementation
|
|
- `package.json` - Node.js project configuration
|
|
|
|
## Available Tools
|
|
|
|
### `list_applications`
|
|
Lists all available applications in the sogen userspace emulator.
|
|
|
|
**Parameters:** None
|
|
|
|
**Example usage:**
|
|
```json
|
|
{
|
|
"name": "list_applications",
|
|
"arguments": {}
|
|
}
|
|
```
|
|
|
|
### `run_application`
|
|
Executes a specific application from the allowed list in the sogen userspace emulator.
|
|
|
|
**Parameters:**
|
|
- `application` (string, required): The name of the application to run (use `list_applications` to see available apps)
|
|
- `args` (array of strings, optional): Arguments to pass to the application
|
|
- `timeout` (number, optional): Timeout in milliseconds (default: 5000)
|
|
|
|
**Example usage:**
|
|
```json
|
|
{
|
|
"name": "run_application",
|
|
"arguments": {
|
|
"application": "echo",
|
|
"args": ["Hello from sogen!"],
|
|
"timeout": 3000
|
|
}
|
|
}
|
|
```
|
|
|
|
## Adding More Tools
|
|
|
|
To add additional tools:
|
|
1. Add the tool definition to the `ListToolsRequestSchema` handler
|
|
2. Add the implementation to the `CallToolRequestSchema` handler
|
|
3. Create the corresponding method in the `MyMCPServer` class
|
|
|
|
## Execution Model
|
|
|
|
The server uses an **analyzer-based execution model**:
|
|
|
|
- Applications are not executed directly
|
|
- Instead, the server runs: `C:/analyer.exe -e C:/somedir <application_name> [args...]`
|
|
- The analyzer handles the actual execution within the sogen environment
|
|
- All output comes from the analyzer process
|
|
|
|
### Command Structure
|
|
```
|
|
C:/analyer.exe -e C:/somedir <application_name> [arguments...]
|
|
```
|
|
|
|
Where:
|
|
- `C:/analyer.exe` - The sogen analyzer executable
|
|
- `-e C:/somedir` - Analyzer flags and environment directory
|
|
- `<application_name>` - The application from `get_applications()`
|
|
- `[arguments...]` - Optional arguments passed to the application
|
|
|
|
## Implementation Required
|
|
|
|
You need to provide the implementation for the `get_applications()` method in `server.js`. This method should:
|
|
|
|
```javascript
|
|
async get_applications() {
|
|
// Return a Promise that resolves to a string array
|
|
// Example: return ['echo', 'ls', 'cat', 'grep'];
|
|
}
|
|
```
|
|
|
|
## Usage
|
|
|
|
This server allows AI assistants to:
|
|
1. **List available applications** using `list_applications`
|
|
2. **Execute specific applications** using `run_application` with validation
|
|
|
|
The server communicates over stdio and is designed for MCP-compatible clients.
|
|
|
|
### Example Workflow
|
|
1. Call `list_applications` to see what's available
|
|
2. Call `run_application` with a valid application name and arguments
|
|
|
|
## Next Steps
|
|
|
|
1. **Implement `get_applications()` method** - Provide the actual implementation
|
|
2. Add application-specific argument validation
|
|
3. Implement resource handling for file access
|
|
4. Add comprehensive logging and monitoring
|
|
5. Consider per-application sandboxing for enhanced security
|