import { Injectable } from '@nestjs/common';
import { Resource } from '@rekog/mcp-nest';
import { z } from 'zod';
import { GammaApiService, Folder } from './gamma-api.service';
@Injectable()
export class FoldersResource {
constructor(private readonly gammaApi: GammaApiService) {}
@Resource({
uri: 'gamma://folders',
name: 'Gamma Folders',
description: 'List all folders (channels) available in your Gamma workspace',
mimeType: 'application/json',
})
async listFolders() {
try {
const allFolders: Folder[] = [];
let cursor: string | null = null;
let hasMore = true;
// Fetch all pages
while (hasMore) {
const response = await this.gammaApi.listFolders({
limit: 50, // API max limit is 50
after: cursor || undefined,
});
allFolders.push(...response.data);
hasMore = response.hasMore;
cursor = response.nextCursor;
}
return {
folders: allFolders,
total: allFolders.length,
};
} catch (error: any) {
throw new Error(
error.response?.data?.message || error.message || 'Failed to fetch folders'
);
}
}
}