Skip to main content
Glama
RachaZayni

MCP-Enabled Integration Platform for CRMs & Productivity Tools

by RachaZayni
README.md

# MCP-Enabled Integration Platform for CRMs & Productivity Tools

A multi-tenant integration layer that connects CRMs (Zoho, Odoo, HubSpot) and productivity 
tools (Google Sheets, Gmail, Google Calendar) through a single unified API — consumable 
both as a standard REST service and as MCP tools for AI agents like OpenManus/Manus.

Built collaboratively with a team of 3.

## Why

Every CRM and productivity tool has its own API schema, auth flow, and data model 
(e.g. `lead_name` in Zoho vs `contact.name` in HubSpot). This project abstracts that away 
behind one consistent interface, so a developer — or an AI agent — can call `crm.create_lead` 
without knowing or caring which underlying platform handles it.

## Architecture

- **Transport layer:** FastAPI REST endpoints + an MCP server layer, so the same platform 
  serves both human API calls and AI agent tool calls.
- **Router structure:** Modular `APIRouter` per integration (Zoho, Odoo, HubSpot, Google 
  Sheets, Gmail, Google Calendar), each exposing create / update / delete / list.
- **Multi-tenancy:** Each user/org is an isolated tenant with its own credentials and config, 
  backed by a SQL database.
- **Unified data model:** A mapping layer normalizes platform-specific fields into one standard 
  schema before returning data to callers.
- **Provisioning:** Secure endpoints for API keys, tokens, and client secrets, including OAuth 
  refresh-token flows for Google and HubSpot.

Design inspired by Supaglue and Apache Camel K.

## Tech Stack

Python, FastAPI, MCP (Model Context Protocol), SQL, OAuth2

## Testing & Validation

- REST endpoints manually tested via FastAPI's Swagger UI (`/docs`)
- MCP tool discovery and execution verified using MCP Inspector
- End-to-end flows validated across both human-driven and agent-driven calls

## What I built

My individual contributions to this platform:

- **Google Maps Tool** — Integrated the Google Cloud Console API to give Manus real-time 
  geographical query capability, including text search, nearby search, and place photo 
  retrieval. Implemented secure API key management and request handling.

- **Gmail MCP Integration** — Registered and integrated an open-source Gmail MCP server 
  (Node.js) as a callable tool for Manus:
  - *Local (stdio):* Ran the server via `npx`, debugged initialization handshakes, and 
    configured OpenManus to register it for local tool calls.
  - *Remote (SSE):* Debugged and fixed the full remote transport layer, including:
    - A failing client/server handshake over SSE, isolated and resolved by tracing each 
      layer of the connection independently.
    - A session-ID bug where the client wasn't forwarding the session ID in request 
      headers, breaking the Gmail server's session tracking.
    - A two-step connection sequence (POST to initialize + persistent GET for the SSE 
      stream) that had to be implemented in the correct order to establish the session.
    - A deadlock in tool discovery, where the client blocked waiting on an SSE reader 
      that hadn't been triggered yet — fixed by having the POST writer push the response 
      directly into the stream before invoking the SSE reader.

- **HubSpot Connector** — Rebuilt the HubSpot integration as a standalone FastAPI service 
  exposed via MCP, containerized it with Docker, and integrated it into the broader platform 
  as one of the pluggable CRM connectors.

## Team vs. individual work

The overall platform architecture (multi-tenancy, unified schema, Zoho/Odoo connectors) was 
a team effort with 2 collaborators. The Google Maps tool, Gmail MCP integration, and the 
FastAPI + Docker HubSpot connector above were my individual contributions.