Skip to main content
Glama

prem_upload_document

Upload documents to a Prem AI repository for storage and retrieval, enabling document management and RAG capabilities.

Instructions

Upload a document to a Prem AI repository

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
repository_idYesID of the repository to upload to
file_pathYesPath to the file to upload

Implementation Reference

  • The main handler function for the prem_upload_document tool. It reads the file, creates a FormData multipart request, and uploads it to the specified Prem AI repository using the Prem SDK's repository.document.create method. Handles errors and logs progress.
    async ({ repository_id, file_path }) => {
      const requestId = uuidv4();
      log(`[${requestId}] Starting document upload to repository ${repository_id}`);
      
      try {
        if (!fs.existsSync(file_path)) {
          throw new Error(`File not found: ${file_path}`);
        }
    
        const formData = new FormData();
        const fileStream = fs.createReadStream(file_path);
        const fileName = path.basename(file_path);
        
        formData.append('file', fileStream, {
          filename: fileName,
          contentType: 'text/plain',
          knownLength: fs.statSync(file_path).size
        });
    
        const response = await this.client.repository.document.create(
          repository_id,
          {
            data: formData,
            headers: {
              ...formData.getHeaders(),
              'Content-Type': 'multipart/form-data'
            }
          }
        );
    
        log(`[${requestId}] Document upload successful: ${JSON.stringify(response)}`);
        return {
          content: [{
            type: "text" as const,
            text: JSON.stringify(response, null, 2)
          }]
        };
      } catch (error) {
        const errorMessage = error instanceof Error ? error.message : String(error);
        log(`[${requestId}] Document upload error: ${errorMessage}`);
        return {
          content: [{
            type: "text" as const,
            text: `Document upload error: ${errorMessage}`
          }],
          isError: true
        };
      }
    }
  • Zod input schema defining the required parameters: repository_id (string) and file_path (string).
    {
      repository_id: z.string().describe("ID of the repository to upload to"),
      file_path: z.string().describe("Path to the file to upload")
    },
  • src/index.ts:127-183 (registration)
    The tool registration call using McpServer.tool() method, specifying the tool name, description, input schema, and handler function.
    this.server.tool(
      "prem_upload_document",
      "Upload a document to a Prem AI repository",
      {
        repository_id: z.string().describe("ID of the repository to upload to"),
        file_path: z.string().describe("Path to the file to upload")
      },
      async ({ repository_id, file_path }) => {
        const requestId = uuidv4();
        log(`[${requestId}] Starting document upload to repository ${repository_id}`);
        
        try {
          if (!fs.existsSync(file_path)) {
            throw new Error(`File not found: ${file_path}`);
          }
    
          const formData = new FormData();
          const fileStream = fs.createReadStream(file_path);
          const fileName = path.basename(file_path);
          
          formData.append('file', fileStream, {
            filename: fileName,
            contentType: 'text/plain',
            knownLength: fs.statSync(file_path).size
          });
    
          const response = await this.client.repository.document.create(
            repository_id,
            {
              data: formData,
              headers: {
                ...formData.getHeaders(),
                'Content-Type': 'multipart/form-data'
              }
            }
          );
    
          log(`[${requestId}] Document upload successful: ${JSON.stringify(response)}`);
          return {
            content: [{
              type: "text" as const,
              text: JSON.stringify(response, null, 2)
            }]
          };
        } catch (error) {
          const errorMessage = error instanceof Error ? error.message : String(error);
          log(`[${requestId}] Document upload error: ${errorMessage}`);
          return {
            content: [{
              type: "text" as const,
              text: `Document upload error: ${errorMessage}`
            }],
            isError: true
          };
        }
      }
    );

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/ucalyptus/prem-mcp-server'

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