Skip to main content
Glama

PDF Reader MCP Server

by sylphxltd
index.ts2.75 kB
#!/usr/bin/env node import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import type { z } from 'zod'; // Import Zod import { zodToJsonSchema } from 'zod-to-json-schema'; import { CallToolRequestSchema, ListToolsRequestSchema, McpError, ErrorCode, } from '@modelcontextprotocol/sdk/types.js'; // Import the aggregated tool definitions import { allToolDefinitions } from './handlers/index.js'; // Removed incorrect import left over from partial diff // --- Tool Names (Constants) --- // Removed tool name constants, names are now in the definitions // --- Server Setup --- const server = new Server( { name: 'filesystem-mcp', version: '0.4.0', // Increment version for definition refactor description: 'MCP Server for filesystem operations relative to the project root.', }, { capabilities: { tools: {} }, } ); // Helper function to convert Zod schema to JSON schema for MCP // Use 'unknown' instead of 'any' for better type safety, although casting is still needed for the SDK const generateInputSchema = (schema: z.ZodType<unknown>): object => { // Need to cast as 'unknown' then 'object' because zodToJsonSchema might return slightly incompatible types for MCP SDK return zodToJsonSchema(schema, { target: 'openApi3' }) as unknown as object; }; server.setRequestHandler(ListToolsRequestSchema, () => { // Removed unnecessary async // Removed log // Map the aggregated definitions to the format expected by the SDK const availableTools = allToolDefinitions.map((def) => ({ name: def.name, description: def.description, inputSchema: generateInputSchema(def.schema), // Generate JSON schema from Zod schema })); return { tools: availableTools }; }); server.setRequestHandler(CallToolRequestSchema, async (request) => { // Use imported handlers // Find the tool definition by name and call its handler const toolDefinition = allToolDefinitions.find((def) => def.name === request.params.name); if (!toolDefinition) { throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${request.params.name}`); } // Call the handler associated with the found definition // The handler itself will perform Zod validation on the arguments return toolDefinition.handler(request.params.arguments); }); // --- Server Start --- async function main(): Promise<void> { const transport = new StdioServerTransport(); await server.connect(transport); console.error('[Filesystem MCP] Server running on stdio'); } main().catch((error: unknown) => { // Specify 'unknown' type for catch variable console.error('[Filesystem MCP] Server error:', error); process.exit(1); });

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/sylphxltd/pdf-reader-mcp'

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