Skip to main content
Glama
rspace-os

RSpace MCP Server

Official
by rspace-os

uploadAndAttachFile

Upload files to RSpace documents and attach them as proper file attachments in one step. Supports all file types including images, PDFs, and data files.

Instructions

Uploads a file to RSpace and attaches it to a document as a proper file attachment

Usage: One-step process to upload any file and attach it to an RSpace document File types: Supports all file types (images, PDFs, data files, protocols, etc.) Attachment: Creates proper RSpace file attachment, not just a link

Parameters:

  • document_id: RSpace document ID (numeric or global ID like "SD12345")

  • file_path: Path to the file to upload (e.g., "data/results.pdf")

  • caption: Optional caption that appears with the attachment

  • description: Optional description for the uploaded file

Returns: Upload confirmation and document update information

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
document_idYes
file_pathYes
captionNo
descriptionNo

Implementation Reference

  • main.py:651-732 (handler)
    Handler function for uploadAndAttachFile tool. Uploads a file using eln_cli.upload_file, attaches it to the specified document by updating the first field with RSpace native attachment format <fileId={file_id}>, includes optional caption and description. Handles errors like file not found.
    @mcp.tool(tags={"rspace", "files"})
    def uploadAndAttachFile(
        document_id: Union[int, str],
        file_path: str,
        caption: Optional[str] = None,
        description: Optional[str] = None
    ) -> dict:
        """
        Uploads a file to RSpace and attaches it to a document as a proper file attachment
        
        Usage: One-step process to upload any file and attach it to an RSpace document
        File types: Supports all file types (images, PDFs, data files, protocols, etc.)
        Attachment: Creates proper RSpace file attachment, not just a link
        
        Parameters:
        - document_id: RSpace document ID (numeric or global ID like "SD12345")
        - file_path: Path to the file to upload (e.g., "data/results.pdf")
        - caption: Optional caption that appears with the attachment
        - description: Optional description for the uploaded file
        
        Returns: Upload confirmation and document update information
        """
        try:
            # Step 1: Upload the file to RSpace
            with open(file_path, 'rb') as file:
                upload_result = eln_cli.upload_file(file, caption=description)
            
            file_id = upload_result.get('id')
            if not file_id:
                return {"error": "File upload failed - no file ID returned"}
            
            # Step 2: Get the current document
            document = eln_cli.get_document(document_id)
            if not document.get('fields'):
                return {"error": f"Document {document_id} has no fields to attach file to"}
            
            # Step 3: Create proper RSpace file attachment
            # This is the key fix - use RSpace's native attachment format
            attachment_html = f'<fileId={file_id}>'
            
            # Add caption as separate paragraph if provided
            if caption:
                attachment_html = f'<p><strong>{caption}</strong></p>\n{attachment_html}'
            
            # Step 4: Update the document with the file attachment
            first_field = document['fields'][0]
            current_content = first_field.get('content', '')
            updated_content = current_content + '\n' + attachment_html
            
            # Update the document
            update_result = eln_cli.update_document(
                document_id=document_id,
                fields=[{
                    'id': first_field['id'],
                    'content': updated_content
                }]
            )
            
            return {
                "success": True,
                "message": "File uploaded and attached successfully",
                "file_info": {
                    "file_id": file_id,
                    "name": upload_result.get('name'),
                    "size": upload_result.get('size'),
                    "globalId": upload_result.get('globalId'),
                    "description": description
                },
                "attachment_info": {
                    "document_id": str(document_id),
                    "caption": caption,
                    "attachment_format": "rspace_native",
                    "field_updated": first_field['id']
                },
                "updated_document": update_result
            }
            
        except FileNotFoundError:
            return {"error": f"File not found: {file_path}"}
        except Exception as e:
            return {"error": f"Failed to upload and attach file: {str(e)}"}

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/rspace-os/rspace-mcp'

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