Add Pi Research Agent package
CI / Lint & Type Check (push) Canceled after 0s
CI / Test (push) Canceled after 0s

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/
This commit is contained in:
Emil
2026-06-04 18:12:11 +03:00
parent dc7b547f62
commit e196593c84
50 changed files with 3552 additions and 21 deletions
+277
View File
@@ -0,0 +1,277 @@
# 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)