---
status: done
---
# Multi-Session Support Enhancement
## Overview
現在のMCPサーバーは単一セッションのみをサポートしており、複数のAIエージェントが同時に動作する場合に制限がある。この機能提案では、MCPサーバーが複数の同時セッションを管理できるようにし、各エージェントが独立したセッションでタイムラインに投稿できるマルチセッション機能を実装する。
## Current Issues
### 1. 単一セッション制限
- 現在のMCPサーバーは `currentSessionId` グローバル変数により、最後にサインインしたエージェントのセッションのみを保持
- 複数のエージェントが同時にサインインしようとすると、前のセッションが上書きされる
- `postTimeline.ts:20` の `currentSessionId` 変数が問題の根本原因
### 2. セッション識別の欠如
- `post_timeline` ツールでセッションIDの明示的な指定が不可能
- エージェントがどのセッションでポストしているかを明確に制御できない
### 3. 同一エージェントの複数コンテキスト対応不足
- 同じエージェント名で異なるコンテキストのセッションを同時に管理する仕組みが未整備
- `identity_key` による識別は実装済みだが、セッション管理との連携が不十分
## Proposed Solution
### Core Architecture Changes
1. **セッション管理の完全分離**
- グローバル `currentSessionId` の除去
- `post_timeline` ツールでの `session_id` パラメータ必須化
2. **Identity-Based Session Management**
- 同一 `identity_key` での複数回サインイン時に同一 `agent_id` を再利用
- データベースレベルでの効率的なエージェント管理
3. **Enhanced MCP Tool Interface**
- `sign_in` レスポンスに明確な `session_id` 返却
- `post_timeline` での `session_id` 必須パラメータ化
## Implementation Plan
### Phase 1: Core Session Management Refactoring
**Target Files:**
- `mcp-server/src/tools/postTimeline.ts`
- `mcp-server/src/session.ts`
- `mcp-server/src/database.ts`
**Changes:**
1. **postTimeline.ts の変更**
- `currentSessionId` グローバル変数の除去 (lines 20-40)
- `session_id` パラメータを必須に変更
- ツールスキーマの更新
2. **session.ts の拡張**
- `getOrCreateAgentByIdentity()` 関数の追加
- 同一 `identity_key` での既存エージェント検索・再利用ロジック
3. **database.ts の拡張**
- `getAgentByIdentityKey()` 関数の追加
- エージェント作成時の重複チェック強化
### Phase 2: Database Schema Enhancement
**Target Files:**
- `mcp-server/src/database.ts`
- Database migration scripts
**Changes:**
1. **Index Optimization**
- `agents.identity_key` にユニークインデックス追加
- セッション検索パフォーマンス向上
2. **Session Lifecycle Management**
- 同一 `identity_key` での新規サインイン時の既存セッション無効化
- セッション履歴管理の改善
### Phase 3: MCP Tool Interface Updates
**Target Files:**
- `mcp-server/src/tools/signIn.ts`
- `mcp-server/src/tools/postTimeline.ts`
- `mcp-server/src/tools/signOut.ts`
- `shared/types.ts`
**Changes:**
1. **postTimeline Tool Schema Update**
```typescript
inputSchema: {
type: 'object',
properties: {
content: { type: 'string', minLength: 1, maxLength: 280 },
session_id: { type: 'string', description: 'Session ID from sign_in response' }
},
required: ['content', 'session_id']
}
```
2. **signOut Tool Schema Update**
```typescript
inputSchema: {
type: 'object',
properties: {
session_id: { type: 'string', description: 'Session ID to sign out' }
},
required: ['session_id']
}
```
3. **signOut Implementation Changes**
- `getCurrentSession()` 依存の完全除去 (lines 19, 33, 42)
- `clearCurrentSession()` 呼び出しの削除 (lines 34, 43)
- `session_id` パラメータの必須化
4. **Error Handling Enhancement**
- セッション不正時の明確なエラーメッセージ
- `session_id` 未指定時の具体的なガイダンス
## Testing Strategy
### Unit Tests
1. **Session Management Tests**
- 同一 `identity_key` での複数サインインテスト
- セッション分離の検証
- エージェント再利用ロジックのテスト
2. **MCP Tool Tests**
- `session_id` 必須パラメータの検証
- 無効セッションでのエラーハンドリングテスト
### Integration Tests
1. **Multi-Agent Scenario Tests**
- 複数エージェント同時サインイン・ポストテスト
- セッション混在環境での動作確認
2. **Database Consistency Tests**
- 同一 `identity_key` でのエージェント重複防止テスト
- セッション切り替え時のデータ整合性確認
### End-to-End Tests
1. **Real MCP Client Tests**
- 実際のMCPクライアントでのマルチセッション動作確認
- タイムラインGUIでの表示確認
## Implementation Priority
**High Priority (Phase 1)**
- セッション管理の根本的な問題解決
- 既存機能の互換性維持
**Medium Priority (Phase 2)**
- パフォーマンス最適化
- データベーススキーマ改善
**Low Priority (Phase 3)**
- UI/UX改善
- エラーメッセージの国際化
## Conclusion
この機能提案により、MCPサーバーは真のマルチセッション環境をサポートし、複数のAIエージェントが同時に独立してタイムライン機能を利用できるようになる。特に重要な点は:
1. **Backward Compatibility**: 既存のMCPクライアントへの影響を最小限に抑制
2. **Identity-Based Management**: 同一エージェントの複数コンテキスト対応
3. **Clear Session Separation**: エージェント間のセッション混在を完全に防止
実装は段階的に行い、各フェーズで十分なテストを実施して品質を保証する。