Skip to main content
Glama

get-membership-notes

Retrieve articles from a note.com membership by providing the membership key, with options to paginate results for efficient browsing.

Instructions

メンバーシップの記事一覧を取得する

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
membershipKeyYesメンバーシップキー(例: fed4670a87bc)
pageNoページ番号
perPageNoページあたりの記事数

Implementation Reference

  • Executes the core logic of fetching membership notes from the Note API, handling pagination, formatting notes and membership info using formatMembershipNote, and structuring the response.
    async ({ membershipKey, page, perPage }) => { try { if (!hasAuth()) { return createAuthErrorResponse(); } if (env.DEBUG) { console.error(`Getting membership notes for membershipKey: ${membershipKey}, page: ${page}, perPage: ${perPage}`); } const data = await noteApiRequest(`/v3/memberships/${membershipKey}/notes?page=${page}&per=${perPage}`, "GET", null, true); if (env.DEBUG) { console.error(`\n===== FULL Membership Notes API Response =====\n${JSON.stringify(data, null, 2)}`); } let formattedNotes: any[] = []; let totalCount = 0; let membershipInfo = {}; if (data.data) { // notesプロパティがある場合 if (data.data.notes && Array.isArray(data.data.notes)) { formattedNotes = data.data.notes.map(formatMembershipNote); totalCount = data.data.totalCount || data.data.total_count || data.data.total || formattedNotes.length; membershipInfo = data.data.membership || data.data.circle || {}; } // itemsプロパティがある場合 else if (data.data.items && Array.isArray(data.data.items)) { formattedNotes = data.data.items.map(formatMembershipNote); totalCount = data.data.totalCount || data.data.total_count || data.data.total || formattedNotes.length; membershipInfo = data.data.membership || data.data.circle || {}; } // 配列が直接返される場合 else if (Array.isArray(data.data)) { formattedNotes = data.data.map(formatMembershipNote); totalCount = formattedNotes.length; } } // メンバーシップ情報を整形 const formattedMembership = { id: (membershipInfo as any)?.id || "", key: (membershipInfo as any)?.key || membershipKey || "", name: (membershipInfo as any)?.name || "", description: (membershipInfo as any)?.description || "", creatorName: (membershipInfo as any)?.creator?.nickname || (membershipInfo as any)?.creatorName || "", price: (membershipInfo as any)?.price || 0, memberCount: (membershipInfo as any)?.memberCount || (membershipInfo as any)?.member_count || 0, notesCount: (membershipInfo as any)?.notesCount || (membershipInfo as any)?.notes_count || 0 }; return createSuccessResponse({ total: totalCount, page: page, perPage: perPage, membership: formattedMembership, notes: formattedNotes }); } catch (error) { return handleApiError(error, "メンバーシップ記事取得"); } }
  • Zod schema defining input parameters: membershipKey (required string), page (number, default 1), perPage (number, default 20).
    { membershipKey: z.string().describe("メンバーシップキー(例: fed4670a87bc)"), page: z.number().default(1).describe("ページ番号"), perPage: z.number().default(20).describe("ページあたりの記事数"), },
  • Registers the 'get-membership-notes' tool on the MCP server with name, Japanese description, input schema, and inline handler function.
    server.tool( "get-membership-notes", "メンバーシップの記事一覧を取得する", { membershipKey: z.string().describe("メンバーシップキー(例: fed4670a87bc)"), page: z.number().default(1).describe("ページ番号"), perPage: z.number().default(20).describe("ページあたりの記事数"), }, async ({ membershipKey, page, perPage }) => { try { if (!hasAuth()) { return createAuthErrorResponse(); } if (env.DEBUG) { console.error(`Getting membership notes for membershipKey: ${membershipKey}, page: ${page}, perPage: ${perPage}`); } const data = await noteApiRequest(`/v3/memberships/${membershipKey}/notes?page=${page}&per=${perPage}`, "GET", null, true); if (env.DEBUG) { console.error(`\n===== FULL Membership Notes API Response =====\n${JSON.stringify(data, null, 2)}`); } let formattedNotes: any[] = []; let totalCount = 0; let membershipInfo = {}; if (data.data) { // notesプロパティがある場合 if (data.data.notes && Array.isArray(data.data.notes)) { formattedNotes = data.data.notes.map(formatMembershipNote); totalCount = data.data.totalCount || data.data.total_count || data.data.total || formattedNotes.length; membershipInfo = data.data.membership || data.data.circle || {}; } // itemsプロパティがある場合 else if (data.data.items && Array.isArray(data.data.items)) { formattedNotes = data.data.items.map(formatMembershipNote); totalCount = data.data.totalCount || data.data.total_count || data.data.total || formattedNotes.length; membershipInfo = data.data.membership || data.data.circle || {}; } // 配列が直接返される場合 else if (Array.isArray(data.data)) { formattedNotes = data.data.map(formatMembershipNote); totalCount = formattedNotes.length; } } // メンバーシップ情報を整形 const formattedMembership = { id: (membershipInfo as any)?.id || "", key: (membershipInfo as any)?.key || membershipKey || "", name: (membershipInfo as any)?.name || "", description: (membershipInfo as any)?.description || "", creatorName: (membershipInfo as any)?.creator?.nickname || (membershipInfo as any)?.creatorName || "", price: (membershipInfo as any)?.price || 0, memberCount: (membershipInfo as any)?.memberCount || (membershipInfo as any)?.member_count || 0, notesCount: (membershipInfo as any)?.notesCount || (membershipInfo as any)?.notes_count || 0 }; return createSuccessResponse({ total: totalCount, page: page, perPage: perPage, membership: formattedMembership, notes: formattedNotes }); } catch (error) { return handleApiError(error, "メンバーシップ記事取得"); } } );

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/shimayuz/note-com-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server