Files
Emil e196593c84
CI / Lint & Type Check (push) Canceled after 0s
CI / Test (push) Canceled after 0s
Add Pi Research Agent package
Autonomous research agent with web search, source analysis, and report synthesis.
Built on Pi agent core. Available as CLI, programmatic API, and MCP server.

Features:
- 4 built-in tools: web_search, read_url, save_note, synthesize_report
- CLI with TUI and print modes
- Programmatic API via ResearchAgent class
- MCP server with 3 tools: research, quick_search, read_url
- Skills system for custom research behavior
- Automatic .env file loading for API keys
- Configurable max turns, output formats (markdown/JSON/bullet)
- Automatic report saving to research-output/
2026-06-04 18:12:11 +03:00

278 lines
9.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MCP Integration Architecture
## Обзор
Pi Research Agent теперь поддерживает MCP (Model Context Protocol), что позволяет другим AI агентам вызывать его для глубокого исследования тем.
## Архитектура
```
┌─────────────────────────────────────────────────────────────┐
│ MCP Client (Claude, Cursor, etc.) │
│ │
│ - Claude Desktop │
│ - Cursor │
│ - Custom agents │
│ - Any MCP-compatible client │
└────────────────────────┬────────────────────────────────────┘
│ stdio (JSON-RPC)
▼
┌─────────────────────────────────────────────────────────────┐
│ Pi Research Agent MCP Server │
│ │
│ Tools: │
│ ├─ research(topic, maxTurns, format) │
│ │ └─ Full autonomous research with report generation │
│ │ │
│ ├─ quick_search(query, maxResults) │
│ │ └─ Fast web search via Tavily API │
│ │ │
│ └─ read_url(url, maxLength) │
│ └─ Extract content from web pages │
└─────────────────────────────────────────────────────────────┘
```
## Компоненты
### 1. MCP Server (`src/mcp-server.ts`)
Создаёт MCP server с тремя tools:
```typescript
export function createResearchMcpServer(): McpServer {
const server = new McpServer({
name: "pi-research-agent",
version: VERSION,
});
server.registerTool("research", { ... });
server.registerTool("quick_search", { ... });
server.registerTool("read_url", { ... });
return server;
}
```
### 2. MCP CLI (`src/mcp-cli.ts`)
Entry point для запуска MCP server:
```typescript
#!/usr/bin/env node
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { loadEnvFile } from "./utils/env.ts";
import { createResearchMcpServer } from "./mcp-server.ts";
loadEnvFile();
const server = createResearchMcpServer();
const transport = new StdioServerTransport();
await server.connect(transport);
```
### 3. Research Agent (`src/agent.ts`)
Основной research agent который:
- Создаёт Pi Agent с research tools
- Выполняет автономное исследование
- Генерирует отчёт
- Сохраняет результаты на диск (опционально)
## Flow
### Research Tool Flow
```
1. Client вызывает research(topic, maxTurns, format)
↓
2. MCP server создаёт ResearchAgent
↓
3. ResearchAgent.prompt(topic)
↓
4. Agent loop:
- web_search(query) → Tavily API
- read_url(url) → fetch content
- save_note(topic, finding, source, confidence)
- synthesize_report(topic, format)
↓
5. Agent генерирует финальный отчёт
↓
6. MCP server возвращает:
{
content: [{
type: "text",
text: "# Research Report\n\n..."
}]
}
```
### Quick Search Flow
```
1. Client вызывает quick_search(query, maxResults)
↓
2. MCP server вызывает tavilySearch(query, options)
↓
3. Форматирует результаты
↓
4. Возвращает список результатов
```
### Read URL Flow
```
1. Client вызывает read_url(url, maxLength)
↓
2. MCP server вызывает fetchAndExtract(url, maxLength)
↓
3. Извлекает текст из HTML
↓
4. Возвращает контент
```
## Конфигурация
### Переменные окружения
```env
TAVILY_API_KEY=*** # Required for web search
OPENROUTER_API_KEY=*** # Required for LLM
LLM_MODEL=minimax/minimax-m3 # Optional, default model
```
### MCP Client Configuration
#### Claude Desktop
```json
{
"mcpServers": {
"research-agent": {
"command": "node",
"args": ["/path/to/pi-research/packages/research-agent/dist/mcp-cli.js"],
"env": {
"TAVILY_API_KEY": "***",
"OPENROUTER_API_KEY": "***"
}
}
}
}
```
#### Cursor
```json
{
"mcpServers": {
"research-agent": {
"command": "node",
"args": ["./node_modules/@earendil-works/pi-research-agent/dist/mcp-cli.js"]
}
}
}
```
## Использование
### Из Claude Desktop
```
User: Исследуй последние разработки в квантовых вычислениях
Claude: [вызывает research tool]
- Ищет в интернете (5-10 запросов)
- Читает источники (5-10 URL)
- Сохраняет заметки (10-20 notes)
- Генерирует отчёт (2000-5000 слов)
- Возвращает результат с цитатами
```
### Из Cursor
```
User: @research-agent Найди информацию о Rust async
Cursor: [вызывает quick_search tool]
- Возвращает 10 результатов поиска
- Пользователь может выбрать URL для глубокого чтения через read_url
```
### Программно (TypeScript)
```typescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
const transport = new StdioClientTransport({
command: "node",
args: ["./dist/mcp-cli.js"],
});
const client = new Client({
name: "my-agent",
version: "1.0.0",
});
await client.connect(transport);
const result = await client.callTool({
name: "research",
arguments: {
topic: "Quantum computing 2026",
maxTurns: 10,
format: "markdown",
},
});
console.log(result.content[0].text);
```
## Преимущества MCP Integration
1. **Переиспользование**: Один research agent для всех клиентов
2. **Стандартизация**: MCP protocol обеспечивает совместимость
3. **Масштабируемость**: Легко добавить новые tools
4. **Изоляция**: Research agent работает в отдельном процессе
5. **Безопасность**: API keys изолированы в MCP server
## Ограничения
1. **Latency**: Полное исследование занимает 2-5 минут
2. **Context size**: Отчёты могут быть очень длинными
3. **Cost**: Tavily API и LLM API имеют стоимость
4. **Rate limits**: Tavily free tier — 1000 запросов/месяц
## Будущие улучшения
1. **Streaming**: Добавить поддержку streaming для длинных исследований
2. **Progress**: Добавить progress notifications через MCP
3. **Caching**: Кэшировать результаты поиска
4. **Batch**: Поддержка batch research (несколько тем одновременно)
5. **Custom skills**: Позволить клиентам передавать custom skills
## Тестирование
### Ручное тестирование
```bash
# Initialize
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}' | node dist/mcp-cli.js
# List tools
(echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}'; echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}') | node dist/mcp-cli.js
# Call tool
(echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}'; echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"quick_search","arguments":{"query":"test","maxResults":5}}}') | node dist/mcp-cli.js
```
### Автоматическое тестирование
См. `examples/mcp-client.ts` для примера programmatic client.
## Ссылки
- [MCP Specification](https://modelcontextprotocol.io/)
- [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk)
- [Pi Research Agent](./README.md)
- [MCP Server Documentation](./MCP_SERVER.md)