Skip to main content
Glama
codyde
by codyde

readfile

Access file contents from a specified path using the MCP File Server. This tool allows AI models to read local files efficiently through a standardized protocol.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filePathYesPath to the file to read

Implementation Reference

  • The handler function that implements the logic for the 'readfile' tool. It reads the specified file using fs.readFile, handles errors, instruments with Sentry spans, and returns the file content.
    async ({ filePath }) => {
        return await Sentry.startSpan(
            {
                name: "readFile",
                op: "tool.readfile",
                attributes: {
                    'file.path': filePath
                }
            },
            async (span) => {
                try {
                    const startTime = Date.now();
                    const fileStats = await fs.stat(filePath);
    
                    span.setAttributes({
                        'file.size': fileStats.size,
                        'file.exists': true
                    });
    
                    // Read the file content
                    const content = await fs.readFile(filePath, 'utf8');
                    const endTime = Date.now();
    
                    // Set operation metrics in span
                    span.setAttributes({
                        'operation.duration_ms': endTime - startTime,
                        // Store a truncated version of content if it's very large to avoid bloating spans
                        'file.content.preview': content.length > 1000 ? content.substring(0, 1000) + '...' : content,
                        'file.content.length': content.length
                    });
                    span.setStatus("ok");
    
                    return {
                        content: [
                            {
                                type: "text",
                                text: content
                            }
                        ]
                    };
                } catch (error) {
                    // Add error information to the span
                    span.setAttributes({
                        'error.message': error.message,
                        'error.stack': error.stack,
                        'file.exists': false
                    });
                    span.setStatus("error");
    
                    // Capture the exception for Sentry
                    Sentry.captureException(error);
    
                    return {
                        content: [
                            {
                                type: "text",
                                text: `Error reading file: ${error.message}`
                            }
                        ]
                    };
                }
            }
        );
    }
  • The input schema for the 'readfile' tool, defining the required 'filePath' parameter using Zod.
    {
        filePath: z.string().describe("Path to the file to read")
    },
  • src/index.js:101-170 (registration)
    The registration of the 'readfile' tool using server.tool(), including name, schema, and handler.
    server.tool(
        "readfile",
        {
            filePath: z.string().describe("Path to the file to read")
        },
        async ({ filePath }) => {
            return await Sentry.startSpan(
                {
                    name: "readFile",
                    op: "tool.readfile",
                    attributes: {
                        'file.path': filePath
                    }
                },
                async (span) => {
                    try {
                        const startTime = Date.now();
                        const fileStats = await fs.stat(filePath);
    
                        span.setAttributes({
                            'file.size': fileStats.size,
                            'file.exists': true
                        });
    
                        // Read the file content
                        const content = await fs.readFile(filePath, 'utf8');
                        const endTime = Date.now();
    
                        // Set operation metrics in span
                        span.setAttributes({
                            'operation.duration_ms': endTime - startTime,
                            // Store a truncated version of content if it's very large to avoid bloating spans
                            'file.content.preview': content.length > 1000 ? content.substring(0, 1000) + '...' : content,
                            'file.content.length': content.length
                        });
                        span.setStatus("ok");
    
                        return {
                            content: [
                                {
                                    type: "text",
                                    text: content
                                }
                            ]
                        };
                    } catch (error) {
                        // Add error information to the span
                        span.setAttributes({
                            'error.message': error.message,
                            'error.stack': error.stack,
                            'file.exists': false
                        });
                        span.setStatus("error");
    
                        // Capture the exception for Sentry
                        Sentry.captureException(error);
    
                        return {
                            content: [
                                {
                                    type: "text",
                                    text: `Error reading file: ${error.message}`
                                }
                            ]
                        };
                    }
                }
            );
        }
    )
Install Server

Other Tools

Related Tools

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/codyde/mcp-file-tool'

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