Transforming Shared Mailboxes into AI-Powered Service Hubs

Bridge365 classifies and routes shared-mailbox email automatically - combining Microsoft Copilot Studio, an Azure-hosted backend, and rule- and ML-based classification into one auditable pipeline.

v0.6.2 BSUL-1.0 - Source-available Phases 1-3 Complete
15Connector actions
3Phases shipped
4Phases planned
1Onboarding wizard

What works today

Phases 1-3 are complete and in production use.

🔌

Custom Connector

Power Platform / Copilot Studio integration with 15 actions, including an autonomous-agent polling trigger for new messages.

Available
☁️

Azure Backend Service

Python Flask app on Azure App Service with Microsoft Graph API integration for reading, classifying, and drafting shared-mailbox messages.

Available
🧠

Classification Engine

Dataverse-backed rule table drives message routing today, with a defined path to AI-powered classification.

Available
✉️

Draft Creation and Routing

Reply drafting, category tagging, folder moves, delta queries, attachments, and extended properties - full Phase 3 routing pipeline.

Available
📜

Audit Trail

Every classification and routing decision is logged to Dataverse for compliance and traceability.

Available
🔒

Defense-in-Depth Security

Entra ID + Easy Auth OAuth2, email allowlist authorization, Key Vault secrets, and optional network restriction - three independent layers.

Available
🧙

Guided Onboarding

onboarding.ps1 auto-discovers your Azure/Power Platform context and walks through app registration, deployment, hardening, and Dataverse setup from one menu.

Available
📁

Mail Folder Discovery

GetMailFolders lets flows resolve destination folder IDs for MoveMessage, including nested department subfolders.

Available

What's planned

The roadmap for Phases 4-7 and general availability.

🔁

Phase 4 - Override and Approvals

Manual classification override, a state-machine workflow, and configurable approval matrices.

Planned - v0.7.0
🧩

Phase 5 - MCP Server Integration

A Model Context Protocol server exposing Bridge365 tools to GitHub Copilot CLI, with schema-validated tool documentation.

Planned - v0.8.0
🤖

Phase 6 - BART Classifier

Fine-tuned BART model deployed on Azure Machine Learning, with confidence-based fallback to rule-based routing.

Planned - v0.9.0
🛡️

Phase 7 - Production Hardening

Monitoring and observability, compliance logging, deeper security hardening, and disaster recovery / backup.

Planned - v0.9.x
🚀

v1.0 - General Availability

Production-ready release with full documentation, training material, and a defined support and maintenance model.

Planned - v1.0.0

How it fits together

Copilot Studio triggers the connector, which talks to an Azure backend that bridges Microsoft Graph and Dataverse.

Copilot Studio Cloud

Custom Connector
Autonomous Agent Trigger
NewMessageReceived (polling)
→

Azure Backend

Service Endpoint
Python Flask App
Microsoft Graph
Shared Mailbox
Dataverse
Classifications and Audit

Authentication is handled entirely by Microsoft Entra ID and Azure App Service's built-in Easy Auth (OAuth2 delegated flow) - no custom token-validation code. Authorization is a lightweight email allowlist check, with an optional network-level restriction as a third layer.

Backend Service & Custom Connector - Every Feature

The Azure backend exposes 17 REST endpoints; 15 of them are wired into the SharedMailboxConnector custom connector as actions, plus one polling trigger for autonomous agents.

Azure Backend Service - REST API

  • GET
    /health

    Health check endpoint for uptime monitoring.

  • GET
    /api/mailbox/messages

    Fetch messages from the shared mailbox's Inbox.

  • GET
    /api/mailbox/messages/poll

    Polling endpoint returning new messages newest-first, backing the connector's NewMessageReceived trigger.

  • GET
    /api/mailbox/messages/{id}

    Fetch a single message by id.

  • POST
    /api/mailbox/classify

    Classify a message using rule-based (and future AI-powered) classification.

  • POST
    /api/mailbox/drafts

    Create a reply draft (reply or reply-all) in the shared mailbox's Drafts folder.

  • PATCH
    /api/mailbox/drafts/{id}

    Update an existing draft's subject, body, or recipients.

  • POST
    /api/mailbox/messages/send

    Send a new (non-reply) message from the shared mailbox.

  • POST
    /api/mailbox/drafts/{id}/send

    Send an existing draft as-is.

  • PATCH
    /api/mailbox/messages/{id}/categories

    Set/replace a message's Outlook categories after classification.

  • GET
    /api/mailbox/folders

    List mail folders (and subfolders) to resolve destination folder ids.

  • POST
    /api/mailbox/messages/{id}/move

    Move a message to a different mail folder (e.g. a department subfolder).

  • GET
    /api/mailbox/messages/delta

    Delta query for incremental sync - tracks new, changed, and deleted messages.

  • GET
    /api/mailbox/messages/{id}/attachments

    List a message's attachments (metadata only).

  • GET
    /api/mailbox/messages/{id}/attachments/{attachmentId}

    Fetch a single attachment, including base64 content bytes.

  • GET
    /api/mailbox/messages/{id}/extended-properties

    Read a MAPI extended property (e.g. internal routing metadata) on a message.

  • PATCH
    /api/mailbox/messages/{id}/extended-properties

    Write a MAPI extended property on a message.

SharedMailboxConnector - Custom Connector

  • Trigger
    NewMessageReceived

    Polling trigger powering Copilot Studio autonomous agents that react to new mail without a conversation.

  • Action
    GetMessages

    Retrieve recent messages from the shared mailbox Inbox.

  • Action
    GetMessage

    Retrieve a single message by id.

  • Action
    ClassifyMessage

    Run rule-based classification and return a target department/confidence.

  • Action
    CreateDraft

    Create a reply or reply-all draft for a message.

  • Action
    UpdateDraft

    Update a draft's subject, body, or recipients before sending.

  • Action
    SendMessage

    Send a brand-new message from the shared mailbox.

  • Action
    SendDraftMessage

    Send an existing draft, e.g. after human approval.

  • Action
    GetMailFolders

    List top-level or nested mail folders to resolve a destination folder id.

  • Action
    UpdateMessageCategories

    Tag a message with Outlook categories after classification.

  • Action
    MoveMessage

    Move a message into a department or other mail folder.

  • Action
    GetMessagesDelta

    Incremental delta sync of new, changed, and deleted messages.

  • Action
    GetAttachments

    List a message's attachment metadata.

  • Action
    GetAttachment

    Fetch one attachment's content, including base64 bytes.

  • Action
    GetExtendedProperty

    Read a custom MAPI extended property from a message.

  • Action
    SetExtendedProperty

    Write a custom MAPI extended property onto a message.

Authentication is delegated Azure AD OAuth2 (accessCode flow) so each allowlisted user signs in with their own Entra ID identity - no app-only credentials are used for connector actions.

Explore the project