Skip to main content
Glama

list_topics

Browse Fumadocs documentation sections and topics to find specific information. Use this tool to see all available sections or list topics within a particular section.

Instructions

Browse available Fumadocs documentation sections and topics. Use without parameters to see all sections, or specify a section to see all topics in that section.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sectionNoSection to list topics from, or 'all' for overview

Implementation Reference

  • The main listTopics handler function that executes the tool logic. It accepts an optional section parameter and either shows an overview of all sections (when section='all') or displays all topics within a specific section.
    export async function listTopics(params: ListTopicsParams): Promise<string> { const { section = "all" } = params; if (section === "all") { const sections = getAllSections(); const output: string[] = [ "# Fumadocs Documentation Topics\n", "Available documentation sections:\n", ]; for (const sec of sections) { output.push(`## ${sec.name} (${sec.id})`); output.push(`${sec.entries.length} topics available\n`); // Show first 5 entries as preview const preview = sec.entries.slice(0, 5); for (const entry of preview) { output.push(`- [${entry.title}](${entry.path}): ${entry.description}`); } if (sec.entries.length > 5) { output.push(`- ... and ${sec.entries.length - 5} more topics`); } output.push(""); } output.push("\n---"); output.push("Use `list_topics` with a specific section to see all topics in that section."); return output.join("\n"); } // Specific section const sectionName = SECTIONS[section as SectionId]; const entries = getEntriesBySection(section as SectionId); if (entries.length === 0) { return `No topics found in section: ${section}`; } const output: string[] = [ `# ${sectionName} Documentation\n`, `${entries.length} topics available:\n`, ]; for (const entry of entries) { output.push(`## ${entry.title}`); output.push(`Path: ${entry.path}`); output.push(`${entry.description}\n`); } return output.join("\n"); }
  • The Zod schema defining the input validation for the list_topics tool. It accepts an optional 'section' parameter that must be one of the allowed values: 'all', 'cli', 'headless', 'framework', 'mdx', or 'ui'.
    export const listTopicsSchema = { section: z .enum(["all", "cli", "headless", "framework", "mdx", "ui"]) .optional() .describe("Section to list topics from, or 'all' for overview"), };
  • TypeScript type definition for the ListTopicsParams, ensuring type safety for the optional section parameter.
    export type ListTopicsParams = { section?: "all" | SectionId; };
  • src/index.ts:26-37 (registration)
    Registration of the list_topics tool with the MCP server. Defines the tool name, description, schema, and the handler function that wraps the listTopics implementation.
    // Register list_topics tool server.tool( "list_topics", "Browse available Fumadocs documentation sections and topics. Use without parameters to see all sections, or specify a section to see all topics in that section.", listTopicsSchema, async (params) => { const result = await listTopics(params); return { content: [{ type: "text", text: result }], }; } );
  • Helper functions used by the listTopics handler: getEntriesBySection() filters documentation entries by section, and getAllSections() returns all sections with their associated entries.
    export function getEntriesBySection(section: SectionId): DocEntry[] { return DOCS_INDEX.filter((entry) => entry.section === section); } // Get all sections with their entries export function getAllSections(): { id: SectionId; name: string; entries: DocEntry[] }[] { return (Object.keys(SECTIONS) as SectionId[]).map((id) => ({ id, name: SECTIONS[id], entries: getEntriesBySection(id), })); }

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/k4cper-g/fumadocs-mcp'

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