bunker-admin 08d8066157 Add ticketed events, Jitsi meeting integration, social features, and calendar system
- Ticketed events: full CRUD, ticket tiers (free/paid/donation), Stripe checkout,
  QR-based check-in scanner, public event pages, ticket confirmation emails
- Event formats: IN_PERSON/ONLINE/HYBRID with auto Jitsi meeting room lifecycle,
  ticket-gated meeting access, moderator JWT tokens, feature-flag guarded
- Social engagement: challenges with scoring/leaderboards, referral tracking,
  volunteer spotlight, impact stories, campaign celebrations, wall of fame
- Social calendar: personal calendar layers, shared calendar items with
  recurrence, scheduling polls, mobile day view
- MCP server: events tool pack with full admin CRUD + meeting token generation
- Unified calendar: eventFormat-aware tags, online event indicators
- Updated docs site, pangolin configs, and various admin UI improvements

Bunker Admin
2026-03-06 14:33:33 -07:00

86 lines
2.9 KiB
TypeScript

import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { ApiClient } from './api-client.js';
import { ToolRegistry } from './tool-registry.js';
// Tier 1 core tools
import { dashboardTools } from './tools/dashboard.js';
import { campaignTools } from './tools/campaigns.js';
import { peopleTools } from './tools/people.js';
import { shiftTools } from './tools/shifts.js';
import { locationTools } from './tools/locations.js';
import { settingsTools } from './tools/settings.js';
import { registerMetaTools } from './tools/meta.js';
// Tier 2 packs
import { emailPack } from './tools/packs/email.js';
import { smsPack } from './tools/packs/sms.js';
import { paymentsPack } from './tools/packs/payments.js';
import { mediaPack } from './tools/packs/media.js';
import { adminPack } from './tools/packs/admin.js';
import { eventsPack } from './tools/packs/events.js';
// Tier 3 composite workflows
import { dailyBriefing } from './tools/composite/daily-briefing.js';
import { outreachReport } from './tools/composite/outreach-report.js';
import { volunteerSummary } from './tools/composite/volunteer-summary.js';
export interface ServerConfig {
apiUrl: string;
mediaApiUrl?: string;
serviceEmail: string;
servicePassword: string;
}
export async function createServer(config: ServerConfig) {
// Initialize MCP server
const server = new McpServer({
name: 'changemaker-lite',
version: '1.0.0',
});
// Initialize API client with JWT auth
const apiClient = new ApiClient({
baseUrl: config.apiUrl,
email: config.serviceEmail,
password: config.servicePassword,
});
// Login to get initial tokens
try {
await apiClient.login();
console.error('[MCP] Authenticated with API successfully');
} catch (err: any) {
console.error(`[MCP] Failed to authenticate: ${err.message}`);
console.error('[MCP] Server will start but API calls will fail until auth succeeds');
}
// Initialize tool registry
const registry = new ToolRegistry(server, apiClient);
// Register Tier 1 core tools (~25 tools, always available)
registry.registerTools(dashboardTools);
registry.registerTools(campaignTools);
registry.registerTools(peopleTools);
registry.registerTools(shiftTools);
registry.registerTools(locationTools);
registry.registerTools(settingsTools);
// Register Tier 3 composite workflows (always available)
registry.registerTools([dailyBriefing, outreachReport, volunteerSummary]);
// Register meta tools (list_tool_packs, enable_tool_pack)
registerMetaTools(server, registry);
// Register Tier 2 packs (available on demand via enable_tool_pack)
registry.registerPack(emailPack);
registry.registerPack(smsPack);
registry.registerPack(paymentsPack);
registry.registerPack(mediaPack);
registry.registerPack(adminPack);
registry.registerPack(eventsPack);
console.error('[MCP] Server initialized with core tools + 6 on-demand packs');
return server;
}