matt-taylor.tech
← Back to projects

Work · National food brokerage

IT Ops MCP server

Python FastMCP Azure Container Apps Entra OAuth (OBO) Microsoft Graph Freshservice ScreenConnect Cisco Meraki Dell TechDirect

I built and deployed an MCP server that gives the IT team one governed connector to its live operational systems. Claude and Cowork reach Freshservice, ScreenConnect, Cisco Meraki, Dell TechDirect warranty, and Microsoft Graph through a single namespaced server instead of a separate integration for each system. It complements the AI-augmented IT operations platform: that platform owns the analyzable Supabase mirror and autonomous agent, while this server answers real-time questions a periodic sync cannot, such as whether a machine is online, the current state of a ticket, or a site's live uplink.

What it exposes

  • Freshservice read across tickets, assets, agents, and groups, plus governed ticket write actions.
  • ScreenConnect find sessions, read live session state (online, last activity, host, OS, serial) and chat history, plus governed session actions.
  • Cisco Meraki device and uplink status, network clients, and client lookup for network-side context.
  • Dell TechDirect warranty lookup by service tag plus a fleet warranty audit that cross-references Freshservice assets to surface machines whose warranty is expiring soon.
  • Microsoft Graph read plus governed directory and account write actions, run delegated on-behalf-of so each call is scoped to the signed-in user's own roles.

Security model

The surface is read-heavy with a set of governed write tools, so the guardrail for who can reach the tools lives at the identity and hosting layer, not in the model.

  • Three privilege models, one connector. Microsoft Graph runs delegated on-behalf-of, so every Graph call is scoped to the signed-in user's own Entra roles. Freshservice resolves each caller's own API key from their signed-in identity, so Freshservice actions run under, and are attributed in the Freshservice audit log to, the individual technician rather than a shared account, falling back to a dedicated service key for callers with no mapped identity. ScreenConnect, Meraki, and Dell authenticate with shared service credentials, so the assigned connector group is the trust boundary for those tools.
  • Identity-gated access. An Entra OAuth connector means only users assigned in Entra can connect; a static bearer-token gate is the in-app floor, layered with Container App network controls.
  • Secrets stay server-side. API keys and shared secrets come from environment variables, never from chat and never committed.

Stack

Python on FastMCP, served over streamable HTTP (stateless) by uvicorn with a /healthz probe, containerized and deployed to Azure Container Apps; stdio transport for local development. Delegated Graph uses an on-behalf-of token exchange; an optional Supabase trail audits ScreenConnect commands.