random-tables-mcp
Version:
An MCP (Model Context Protocol) server for managing and rolling on random-table assets used in tabletop RPGs. Create, update, and roll on random tables with support for nested tables, weighted entries, and range-based results.
69 lines • 3.94 kB
JavaScript
#!/usr/bin/env node
/**
* MCP Random Tables Server
*
* This is the main entry point for the MCP Random Tables server.
* It exports the domain entities and includes the MCP server implementation.
*/
// Re-export domain entities and value objects
export * from './domain/index.js';
// Export use cases and ports (Phase 2)
export * from './use-cases/index.js';
export * from './ports/index.js';
// Export secondary adapters (Phase 3)
export * from './adapters/secondary/index.js';
// Export primary adapters (Phase 4)
export * from './adapters/primary/mcp/mcp-server.js';
// Import dependencies for server setup
import { CryptoRandomNumberGenerator, FileTableRepository, FileRollTemplateRepository, } from './adapters/secondary/index.js';
import { CreateTableUseCase, GetTableUseCase, ListTablesUseCase, RollOnTableUseCase, UpdateTableUseCase, CreateTemplateUseCase, GetTemplateUseCase, ListTemplatesUseCase, UpdateTemplateUseCase, DeleteTemplateUseCase, EvaluateTemplateUseCase, RollServiceImpl, TableServiceImpl, RollTemplateServiceImpl, } from './use-cases/index.js';
import { McpServer } from './adapters/primary/mcp/mcp-server.js';
import path from 'path';
/**
* Main function to start the MCP server
*/
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
async function main() {
console.warn('MCP Random Tables Server');
console.warn('Phase 1: Core Domain Implementation completed');
console.warn('Phase 2: Use Cases and Ports Implementation completed');
console.warn('Phase 3: Secondary Adapters Implementation completed');
console.warn('Phase 4: MCP Server Implementation starting...');
// Set up the data directory
const dataDir = process.env.DATA_DIR ?? path.join(process.cwd(), 'data');
// Check if resources can be used (defaults to false if not specified)
const canUseResource = process.env.CAN_USE_RESOURCE === 'true';
console.warn(`Resources ${canUseResource ? 'enabled' : 'disabled'}`);
// Initialize repositories and services
const tableRepository = new FileTableRepository(dataDir);
const templateRepository = new FileRollTemplateRepository(dataDir);
const rng = new CryptoRandomNumberGenerator();
// Initialize table use cases
const createTableUseCase = new CreateTableUseCase(tableRepository);
const getTableUseCase = new GetTableUseCase(tableRepository);
const listTablesUseCase = new ListTablesUseCase(tableRepository);
const updateTableUseCase = new UpdateTableUseCase(tableRepository);
const rollOnTableUseCase = new RollOnTableUseCase(tableRepository, rng);
// Initialize template use cases
const createTemplateUseCase = new CreateTemplateUseCase(templateRepository);
const getTemplateUseCase = new GetTemplateUseCase(templateRepository);
const listTemplatesUseCase = new ListTemplatesUseCase(templateRepository);
const updateTemplateUseCase = new UpdateTemplateUseCase(templateRepository);
const deleteTemplateUseCase = new DeleteTemplateUseCase(templateRepository);
const evaluateTemplateUseCase = new EvaluateTemplateUseCase(templateRepository, tableRepository, rng);
// Initialize services
const tableService = new TableServiceImpl(createTableUseCase, getTableUseCase, listTablesUseCase, updateTableUseCase);
const rollService = new RollServiceImpl(rollOnTableUseCase);
const templateService = new RollTemplateServiceImpl(createTemplateUseCase, getTemplateUseCase, listTemplatesUseCase, updateTemplateUseCase, deleteTemplateUseCase, evaluateTemplateUseCase);
// Initialize and start MCP server
const mcpServer = new McpServer(tableService, rollService, templateService);
mcpServer.initialize();
await mcpServer.start();
console.warn('Phase 4: MCP Server Implementation completed');
}
// Run the main function
main().catch(error => {
console.error('Error starting server:', error);
process.exit(1);
});
//# sourceMappingURL=index.js.map