UNPKG

@kazuph/mcp-pocket

Version:

Model Context Protocol server for Pocket API - Access and manage your Pocket articles through Claude

63 lines (62 loc) 2.13 kB
/** * Pocket APIから最新の未読記事を取得します * @param config Pocket APIの認証情報 * @param count 取得する記事の件数(デフォルト: 20件、最大20件まで) * @returns 記事のID、タイトル、URL、概要文を含む配列 */ export async function getPocketList(config, count = 20) { const response = await fetch("https://getpocket.com/v3/get", { method: "POST", headers: { "Content-Type": "application/json; charset=UTF-8", "X-Accept": "application/json", }, body: JSON.stringify({ consumer_key: config.consumerKey, access_token: config.accessToken, count: Math.min(count, 20), sort: "newest", detailType: "complete", state: "unread", // 未読の記事のみを取得 }), }); if (!response.ok) { throw new Error(`Pocket API request failed: ${response.statusText}`); } const data = (await response.json()); const filteredList = Object.values(data.list).map((item) => ({ id: item.item_id, title: item.resolved_title || item.given_title || "", url: item.resolved_url || "", excerpt: item.excerpt || "", })); return filteredList; } /** * 指定された記事を既読にします * @param config Pocket APIの認証情報 * @param itemId 既読にする記事のID */ export async function markAsRead(config, itemId) { const response = await fetch("https://getpocket.com/v3/send", { method: "POST", headers: { "Content-Type": "application/json; charset=UTF-8", "X-Accept": "application/json", }, body: JSON.stringify({ consumer_key: config.consumerKey, access_token: config.accessToken, actions: [ { action: "archive", item_id: itemId, }, ], }), }); if (!response.ok) { throw new Error(`Failed to mark article as read: ${response.statusText}`); } return true; }