Files
mcp-proc/docs/API.md
2025-10-11 03:22:03 +02:00

414 líneas
5.9 KiB
Markdown

# API Usage Guide
## Table of Contents
- [Getting Started](#getting-started)
- [HTTP API](#http-api)
- [JSON-RPC API](#json-rpc-api)
- [SSE Events](#sse-events)
- [Examples](#examples)
## Getting Started
Start the HTTP server:
```bash
npm run start:sse
```
The server will be available at `http://localhost:3000` with the following endpoints:
- `/health` - Health check
- `/api/*` - REST API endpoints
- `/mcp/sse` - Server-Sent Events endpoint
- `/mcp/rpc` - JSON-RPC endpoint
- `/api-docs` - Interactive Swagger documentation
## HTTP API
### System Information Endpoints
#### Get CPU Information
```bash
GET /api/cpu
```
Response:
```json
{
"success": true,
"data": {
"model": "Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz",
"cores": 6,
"processors": 12,
"mhz": 2600.0
}
}
```
#### Get Memory Information
```bash
GET /api/memory
```
Response:
```json
{
"success": true,
"data": {
"total": 16384000,
"free": 4096000,
"available": 8192000,
"buffers": 512000,
"cached": 2048000,
"swapTotal": 4096000,
"swapFree": 4096000
}
}
```
#### Get Load Average
```bash
GET /api/load
```
Response:
```json
{
"success": true,
"data": {
"one": 1.5,
"five": 1.2,
"fifteen": 0.9,
"runningProcesses": 2,
"totalProcesses": 350
}
}
```
#### Get Network Statistics
```bash
GET /api/network?interface=eth0
```
Response:
```json
{
"success": true,
"data": [
{
"interface": "eth0",
"rxBytes": 1048576000,
"rxPackets": 1000000,
"rxErrors": 0,
"rxDropped": 0,
"txBytes": 524288000,
"txPackets": 500000,
"txErrors": 0,
"txDropped": 0
}
]
}
```
### ProcFS Operations
#### Read ProcFS File
```bash
GET /api/procfs?path=sys/kernel/hostname&format=raw
```
Response:
```json
{
"success": true,
"data": "myserver\n"
}
```
#### Write ProcFS File
```bash
POST /api/procfs
Content-Type: application/json
{
"path": "sys/kernel/hostname",
"value": "newserver"
}
```
### Sysctl Operations
#### Read Sysctl Parameter
```bash
GET /api/sysctl/net.ipv4.ip_forward
```
Response:
```json
{
"success": true,
"data": {
"key": "net.ipv4.ip_forward",
"value": 0,
"writable": true
}
}
```
#### Write Sysctl Parameter
```bash
POST /api/sysctl
Content-Type: application/json
{
"key": "net.ipv4.ip_forward",
"value": 1
}
```
#### List All Sysctl Parameters
```bash
GET /api/sysctl
```
### Process Management
#### List All Processes
```bash
GET /api/processes
```
Response:
```json
{
"success": true,
"data": [1, 2, 3, 100, 101, ...]
}
```
#### Get Process Information
```bash
GET /api/processes/1
```
Response:
```json
{
"success": true,
"data": {
"pid": 1,
"name": "systemd",
"state": "S",
"ppid": 0,
"threads": 1,
"vmSize": 168960,
"vmRss": 13312
}
}
```
#### Set Process Priority
```bash
POST /api/processes/12345/priority
Content-Type: application/json
{
"priority": 10
}
```
## JSON-RPC API
Send JSON-RPC requests to `/mcp/rpc`:
```bash
POST /mcp/rpc
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}
```
Response:
```json
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{
"name": "get_cpu_info",
"description": "Get CPU information"
},
...
]
}
}
```
### Call a Tool
```bash
POST /mcp/rpc
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_cpu_info",
"arguments": {}
}
}
```
## SSE Events
Connect to the SSE endpoint to receive real-time updates:
```javascript
const eventSource = new EventSource('http://localhost:3000/mcp/sse');
eventSource.addEventListener('connected', (event) => {
console.log('Connected:', JSON.parse(event.data));
});
eventSource.onerror = (error) => {
console.error('Error:', error);
};
```
## Examples
### cURL Examples
```bash
# Health check
curl http://localhost:3000/health
# Get CPU info
curl http://localhost:3000/api/cpu
# Get memory info
curl http://localhost:3000/api/memory
# Read sysctl
curl http://localhost:3000/api/sysctl/kernel.hostname
# Write sysctl (requires permissions)
curl -X POST http://localhost:3000/api/sysctl \
-H "Content-Type: application/json" \
-d '{"key":"net.ipv4.ip_forward","value":1}'
# Get process info
curl http://localhost:3000/api/processes/1
```
### JavaScript/Node.js Example
```javascript
const fetch = require('node-fetch');
async function getCPUInfo() {
const response = await fetch('http://localhost:3000/api/cpu');
const data = await response.json();
console.log(data);
}
getCPUInfo();
```
### Python Example
```python
import requests
response = requests.get('http://localhost:3000/api/cpu')
data = response.json()
print(data)
```
### Using with MCP Client
Configure your MCP client (e.g., Claude Desktop):
```json
{
"mcpServers": {
"procfs": {
"command": "node",
"args": ["/path/to/mcp-proc/dist/cli.js"]
}
}
}
```
Then use the tools in your MCP client:
```
Get CPU information using the procfs server
```
The client will automatically call the appropriate tool and format the response.
## Error Handling
All endpoints return errors in a consistent format:
```json
{
"success": false,
"error": "Error message here"
}
```
HTTP status codes:
- `200` - Success
- `400` - Bad Request (invalid parameters)
- `403` - Forbidden (insufficient permissions)
- `404` - Not Found
- `500` - Internal Server Error
## Rate Limiting
Currently no rate limiting is implemented. For production use, consider adding rate limiting middleware.
## Authentication
Currently no authentication is required. For production use, implement authentication using:
- API keys
- JWT tokens
- OAuth 2.0
- Basic Auth
Example with API key middleware:
```typescript
app.use((req, res, next) => {
const apiKey = req.headers['x-api-key'];
if (apiKey !== process.env.API_KEY) {
return res.status(403).json({ error: 'Invalid API key' });
}
next();
});
```