Hive MCP Server
by gluneau
Verified
- src
#!/usr/bin/env node
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { registerTools } from './tools';
import { validatePrivateKey, getConfig } from './config';
import logger from './utils/logger';
const startServer = async () => {
const config = getConfig();
// Set log level
logger.setLogLevel(config.log.logLevel);
// Check environment variables and log status
if (!config.hive.username) {
logger.warn('Warning: HIVE_USERNAME environment variable is not set');
} else {
logger.info(`Info: Using Hive account: ${config.hive.username}`);
}
// Check posting key
if (!config.hive.postingKey) {
logger.warn('Warning: HIVE_POSTING_KEY environment variable is not set');
} else {
logger.info('Info: HIVE_POSTING_KEY is set');
// Validate private key format (without logging the actual key)
if (validatePrivateKey(config.hive.postingKey)) {
logger.info('Info: HIVE_POSTING_KEY is valid');
} else {
logger.warn('Warning: HIVE_POSTING_KEY is not a valid private key');
}
}
// Check active key
if (!config.hive.activeKey) {
logger.warn('Warning: HIVE_ACTIVE_KEY environment variable is not set (required for token transfers)');
} else {
logger.info('Info: HIVE_ACTIVE_KEY is set');
// Validate active key format
if (validatePrivateKey(config.hive.activeKey)) {
logger.info('Info: HIVE_ACTIVE_KEY is valid');
} else {
logger.warn('Warning: HIVE_ACTIVE_KEY is not a valid private key');
}
}
// Check memo key
if (!config.hive.memoKey) {
logger.warn('Warning: HIVE_MEMO_KEY environment variable is not set');
} else {
logger.info('Info: HIVE_MEMO_KEY is set');
// Validate memo key format
if (validatePrivateKey(config.hive.memoKey)) {
logger.info('Info: HIVE_MEMO_KEY is valid');
} else {
logger.warn('Warning: HIVE_MEMO_KEY is not a valid private key');
}
}
// Create and configure the server
const server = new McpServer({
name: config.server.name,
version: config.server.version
});
// Register tools
registerTools(server);
// Connect to the transport
const transport = new StdioServerTransport();
await server.connect(transport);
};
// Start the server and handle any errors
startServer().catch((err) => {
// Use logger.error instead of console.error
logger.error(`Server failed to start: ${err instanceof Error ? err.message : String(err)}`);
process.exit(1);
});