import { Tool } from '@modelcontextprotocol/sdk/types.js';
import { AddFeedSchema } from '../utils/validation.js';
import { ConfigManager } from '../config/manager.js';
import { AddFeedResponse } from '../types/index.js';
export function createAddFeedTool(): Tool {
return {
name: 'add_feed',
description: '新しいRSSフィードを登録します',
inputSchema: {
type: 'object',
properties: {
name: {
type: 'string',
description: 'フィードの表示名',
minLength: 1,
maxLength: 100
},
url: {
type: 'string',
description: 'RSS/AtomフィードのURL'
}
},
required: ['name', 'url']
}
};
}
export async function handleAddFeed(
args: any,
configManager: ConfigManager
): Promise<AddFeedResponse> {
try {
const params = AddFeedSchema.parse(args);
const existingFeeds = configManager.getFeeds();
const existingFeed = existingFeeds.find(feed => feed.url === params.url);
if (existingFeed) {
return {
success: false,
feedId: '',
message: 'このURLのフィードは既に登録されています'
};
}
const feedId = await configManager.addFeed(params.name, params.url);
return {
success: true,
feedId,
message: 'フィードが正常に追加されました'
};
} catch (error) {
if (error instanceof Error && 'issues' in error) {
return {
success: false,
feedId: '',
message: '入力パラメータが無効です'
};
}
return {
success: false,
feedId: '',
message: `フィード追加エラー: ${error instanceof Error ? error.message : 'Unknown error'}`
};
}
}