multi-provider chat platform abstraction with dynamic module loading
Implements a pluggable provider architecture where each chat platform (Google Chat, Slack, Teams) is a self-contained module loaded dynamically at runtime via the --provider CLI flag. Each provider implements its own authentication, API layer, and tool registry following a standardized directory structure (src/providers/<platform_name>/), enabling concurrent execution of multiple providers and reducing coupling between platform implementations. The system uses Python's importlib to load provider modules and instantiate their mcp_instance.py entry points without modifying core server code.
Unique: Uses Python's importlib for runtime provider discovery combined with a standardized provider interface (mcp_instance.py + provider-config.yaml), enabling zero-modification extensibility without requiring core server changes or provider registration boilerplate
vs alternatives: More flexible than hardcoded provider support (like Slack's native integrations) because new platforms can be added as drop-in modules; more maintainable than monolithic chat clients because platform logic is isolated
mcp protocol tool registration and invocation with structured parameters
Exposes chat platform operations as MCP tools using the @mcp.tool() decorator pattern, where each tool receives structured JSON parameters from AI assistants and returns typed results. The system translates natural language commands from MCP clients (Cursor, Claude Desktop) into tool invocations with validated parameter schemas, enabling AI assistants to programmatically interact with chat platforms without custom parsing logic. Tools are registered at server startup and advertised to clients via MCP's tool discovery protocol.
Unique: Uses Python decorators (@mcp.tool()) combined with JSON schema validation to create a declarative tool interface that automatically handles MCP protocol serialization, parameter validation, and result formatting without boilerplate
vs alternatives: Simpler than REST API wrappers because tool definitions are co-located with implementation; more discoverable than webhook-based integrations because MCP clients can enumerate available tools at runtime
google chat api integration with oauth 2.0 service account authentication
Implements production-ready Google Chat integration using OAuth 2.0 service account credentials stored in provider-config.yaml, with automatic token refresh and API error handling. The authentication system manages credentials lifecycle (loading, validation, refresh) and provides an authenticated HTTP client for all Google Chat API calls (messages, spaces, search). The provider abstracts Google's REST API behind a tool interface, handling pagination, rate limiting, and response transformation.
Unique: Wraps Google Chat REST API with automatic OAuth 2.0 token lifecycle management (refresh, expiration handling) and provides a tool-based interface that abstracts API pagination and error handling, reducing integration complexity from ~200 lines of boilerplate to a single tool definition
vs alternatives: More secure than hardcoded API keys because service accounts use time-limited tokens; more maintainable than direct API calls because authentication logic is centralized and reusable across all Google Chat tools
natural language message search with date filtering and semantic ranking
Implements a search_messages_tool that accepts natural language queries and optional date range filters, translating them into Google Chat API search requests with structured result ranking. The system supports date filtering patterns (e.g., 'last 7 days', 'since 2024-01-01') parsed from query parameters, and returns ranked results with message content, sender, timestamp, and space context. Search results are formatted for AI assistant consumption with relevance metadata.
Unique: Combines natural language query parsing with custom date filter extraction (pattern-based parsing for 'last N days', 'since YYYY-MM-DD') and Google Chat API search, enabling AI assistants to discover chat history without learning API syntax
vs alternatives: More accessible than raw API search because it accepts natural language; more flexible than keyword-only search because it supports temporal filtering and semantic ranking
message sending with space and thread context preservation
Implements a send_message_tool that allows AI assistants to post messages to Google Chat spaces with optional thread context, preserving conversation structure and enabling threaded discussions. The tool accepts space ID/name, message text, and optional thread ID, translating them into Google Chat API calls that maintain message threading and space isolation. Results include message metadata (ID, timestamp, sender) for follow-up operations.
Unique: Preserves Google Chat's threading model by accepting optional thread IDs, enabling AI assistants to participate in structured conversations rather than posting isolated messages; abstracts space resolution (name or ID) to reduce user friction
vs alternatives: More conversational than webhook-based notifications because it supports threading; more reliable than user-impersonation approaches because it uses service account credentials with explicit permissions
space and member discovery with metadata enumeration
Implements tools for discovering Google Chat spaces accessible to the service account and listing space members with metadata (name, email, role). The system queries Google Chat API to enumerate spaces and members, returning structured results with display names, email addresses, and member roles. This enables AI assistants to understand team structure and identify relevant spaces for operations without manual configuration.
Unique: Provides automated space and member discovery without manual configuration, enabling AI assistants to dynamically identify collaboration targets; abstracts Google Chat's space hierarchy and membership model
vs alternatives: More discoverable than hardcoded space IDs because it enumerates accessible spaces at runtime; more maintainable than manual configuration because it adapts to space creation/deletion
configuration management with environment variable and file-based credential handling
Implements a configuration system that loads provider settings from provider-config.yaml files and supports environment variable overrides for sensitive credentials (API keys, service account paths). The system validates configuration at startup, ensuring required fields are present and credentials are accessible, with clear error messages for missing or invalid configuration. Configuration is provider-specific, stored in src/providers/<platform>/provider-config.yaml, enabling per-provider customization without modifying core server code.
Unique: Combines YAML file-based configuration with environment variable overrides, enabling both local development (file-based) and production deployments (env-var-based) without code changes; validates configuration at startup to fail fast
vs alternatives: More flexible than hardcoded configuration because it supports environment overrides; more secure than environment-only config because it allows file-based defaults with env var overrides
mcp client integration with cursor ide and claude desktop configuration
Provides integration guidance and configuration templates for connecting the MCP server to Cursor IDE and Claude Desktop via their respective MCP configuration files (~/.cursor/mcp.json, ~/.claude/mcp-server.json). The system documents how to register the MCP server as a tool provider in these clients, including command-line arguments for provider selection and credential passing. Integration is declarative via JSON configuration; no code changes required to clients.
Unique: Provides client-agnostic MCP server implementation that works with multiple AI assistants (Cursor, Claude Desktop) via standard MCP protocol, with documented configuration templates for each client to reduce setup friction
vs alternatives: More portable than client-specific integrations because it uses standard MCP protocol; more discoverable than REST APIs because tools are enumerated in client UI
+2 more capabilities