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