Skip to main content
Glama
index.tsโ€ข3.57 kB
#!/usr/bin/env node /** * Writer's Aid - Main Entry Point * Supports both MCP server mode and CLI mode */ import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js"; import { WritersAid } from "./WritersAid.js"; import { writerToolDefinitions } from "./tools/WriterToolDefinitions.js"; import { WriterToolHandlers } from "./tools/WriterToolHandlers.js"; import { createCLI } from "./cli/commands.js"; import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; // Get package.json version const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const packageJsonPath = path.join(__dirname, "../package.json"); const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8")) as { version: string }; const VERSION = packageJson.version; // Export core components export { WritersAid } from "./WritersAid.js"; export { WritingStorage } from "./storage/WritingStorage.js"; export { SQLiteManager } from "./storage/SQLiteManager.js"; export { QueryCache } from "./cache/QueryCache.js"; // Export markdown types export type { MarkdownFile, MarkdownChunk, MarkdownHeading, MarkdownLink, MarkdownMetadata, MarkdownTodo, MarkdownCodeBlock, ParsedMarkdown, SearchResult, LinkGraph, WritingStats, ProgressReport, } from "./markdown/types.js"; // Detect mode: CLI if arguments provided, MCP server otherwise const hasCliArgs = process.argv.length > 2; if (hasCliArgs) { // CLI mode - run commands const program = createCLI(); program.parse(process.argv); } else { // MCP server mode - start stdio server const server = new Server( { name: "writers-aid", version: VERSION, }, { capabilities: { tools: {}, }, } ); // Register tool list handler server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: writerToolDefinitions, })); // Register tool call handler server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; try { // Extract project_path from arguments, default to current directory const projectPath = (args?.project_path as string) || process.cwd(); // Initialize WritersAid for this specific tool call const writersAid = new WritersAid({ projectPath }); const handlers = new WriterToolHandlers(writersAid); // Call the tool const result = await handlers.handleTool(name, args || {}); // Close the connection after use writersAid.close(); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); return { content: [ { type: "text", text: `Error: ${errorMessage}`, }, ], isError: true, }; } }); // Start server const transport = new StdioServerTransport(); server.connect(transport).catch((error) => { console.error("Server error:", error); process.exit(1); }); console.error(`Writer's Aid MCP v${VERSION} - Server started`); }

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/xiaolai/claude-writers-aid-mcp'

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