Skip to main content
Glama

AFFiNE MCP Server

by DAWNCR0W
test-fixed-workspace.mjsβ€’3.3 kB
#!/usr/bin/env node import { spawn } from 'child_process'; import { config } from 'dotenv'; config(); const MCP_SERVER_PATH = './dist/index.js'; class FixedWorkspaceCreator { constructor() { this.server = null; } async startServer() { return new Promise((resolve, reject) => { this.server = spawn('node', [MCP_SERVER_PATH], { env: { ...process.env }, stdio: ['pipe', 'pipe', 'pipe'] }); this.server.on('error', reject); // Capture stderr for debugging this.server.stderr.on('data', (data) => { console.error('Server:', data.toString()); }); setTimeout(resolve, 2000); }); } async sendRequest(method, params = {}) { return new Promise((resolve) => { const request = { jsonrpc: '2.0', method: 'tools/call', params: { name: method, arguments: params }, id: Date.now() }; this.server.stdin.write(JSON.stringify(request) + '\n'); const handler = (data) => { const lines = data.toString().split('\n').filter(line => line.trim()); for (const line of lines) { try { const response = JSON.parse(line); if (response.id === request.id) { this.server.stdout.removeListener('data', handler); resolve(response); } } catch (e) { // Continue } } }; this.server.stdout.on('data', handler); setTimeout(() => { this.server.stdout.removeListener('data', handler); resolve({ error: { message: 'Timeout' } }); }, 15000); }); } async createFixedWorkspace() { console.log('πŸš€ Creating FIXED Workspace with Initial Document'); console.log('='.repeat(60)); await this.startServer(); console.log('βœ… MCP Server started\n'); // Use the new fixed tool console.log('πŸ“ Creating workspace with initial document...'); const wsResult = await this.sendRequest('affine_create_workspace_fixed', { name: 'AFFiNE MCP v1.1.0 Working', avatar: 'πŸš€' }); if (wsResult.error) { console.error('❌ Failed to create workspace:', wsResult.error.message); this.server.kill(); return; } const wsData = JSON.parse(wsResult.result.content[0].text); console.log(`βœ… Status: ${wsData.status}`); if (wsData.id) { console.log(`πŸ“Œ Workspace ID: ${wsData.id}`); console.log(`πŸ“„ Initial Document ID: ${wsData.firstDocId}`); console.log(`πŸ”— View at: ${wsData.url || process.env.AFFINE_BASE_URL + '/workspace/' + wsData.id}`); if (wsData.message) { console.log(`πŸ’¬ ${wsData.message}`); } } else if (wsData.error) { console.error(`❌ Error: ${wsData.error}`); if (wsData.note) { console.error(`πŸ“ Note: ${wsData.note}`); } } console.log('\n' + '='.repeat(60)); console.log('Test complete. Check the AFFiNE UI to verify the workspace is accessible.'); console.log('='.repeat(60)); if (this.server) { this.server.kill(); } } } const creator = new FixedWorkspaceCreator(); creator.createFixedWorkspace().catch(console.error);

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/DAWNCR0W/affine-mcp-server'

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