affine_upload_blob
Upload files or blobs to workspace storage by specifying workspace ID, content, filename, and MIME type. Integrates with AFFiNE MCP Server for efficient workspace data management.
Instructions
Upload a file or blob to workspace storage.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Base64 encoded content or text | |
| contentType | No | MIME type | |
| filename | No | Filename | |
| workspaceId | Yes | Workspace ID |
Implementation Reference
- src/tools/blobStorage.ts:8-26 (handler)The uploadBlobHandler async function that executes the affine_upload_blob tool logic. It generates a mock blob ID, computes size, and returns structured metadata (simplified implementation without actual upload).const uploadBlobHandler = async ({ workspaceId, content, filename, contentType }: { workspaceId: string; content: string; filename?: string; contentType?: string }) => { try { // Note: Actual file upload requires multipart form data // This is a simplified version that returns structured data const blobId = `blob_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; return text({ id: blobId, workspaceId, filename: filename || "unnamed", contentType: contentType || "application/octet-stream", size: content.length, uploadedAt: new Date().toISOString(), note: "Blob metadata created. Use AFFiNE UI for actual file upload." }); } catch (error: any) { return text({ error: error.message }); } };
- src/tools/blobStorage.ts:32-37 (schema)Input schema using Zod for validating tool parameters: required workspaceId and content (base64 string), optional filename and contentType.inputSchema: { workspaceId: z.string().describe("Workspace ID"), content: z.string().describe("Base64 encoded content or text"), filename: z.string().optional().describe("Filename"), contentType: z.string().optional().describe("MIME type") }
- src/tools/blobStorage.ts:27-40 (registration)Registration of the 'affine_upload_blob' tool via McpServer.registerTool(), including title, description, schema, and reference to the handler function.server.registerTool( "affine_upload_blob", { title: "Upload Blob", description: "Upload a file or blob to workspace storage.", inputSchema: { workspaceId: z.string().describe("Workspace ID"), content: z.string().describe("Base64 encoded content or text"), filename: z.string().optional().describe("Filename"), contentType: z.string().optional().describe("MIME type") } }, uploadBlobHandler as any );
- src/index.ts:73-73 (registration)Top-level call to registerBlobTools during server initialization, which in turn registers the affine_upload_blob tool.registerBlobTools(server, gql);