Why bother
OrbitalDevs maintained 12 connectors (GitHub, GitLab, Sentry, Datadog, PagerDuty, Slack, Linear, Jira, Vercel, AWS, GCP, Azure). Each was a Python wrapper with its own auth, schema style, and error format. Same code, three times — once in their CLI, once in their hosted product, once in the customer SDK.
The plan
Move each connector to an MCP server:
- Tools for the verbs (
create_issue,open_pr,page_oncall) - Resources for the read-only data (
github://repo/{owner}/{name}/issue/{number}) - Prompts for the canonical workflows (
/triage-this-issue)
stdio transport for local; HTTPS for hosted. One server, three clients.
What broke along the way
Auth was the hard part — each connector had a different secret-handoff story. We settled on a shared "secrets resolver" that the MCP server calls at startup. Caching strategy for resources also took a pass — we ended up with 60-second TTL on most read endpoints.
What stuck
MCP is what unlocked the "one implementation, many clients" story we'd been promising customers for years. Schemas + error contracts cleaned up the malformed-arg problem on the way through.
