Authentication & SSO
Okta, Auth0, and Keycloak bridge your identity provider into MCP. The agent authenticates with corporate credentials over OAuth 2.1 + PKCE and inherits your existing roles and group memberships.
Security just put a hold on your team’s AI coding tools. Until you can prove they authenticate through corporate SSO, leave an audit trail, and never exfiltrate source through an unapproved endpoint, nobody ships with them. You have a week. This guide is the playbook for getting Cursor, Claude Code, and Codex past that review and into real enterprise workflows, using Model Context Protocol (MCP) servers as the secure bridge to Jira, GitHub, Azure, and Slack.
When This Breaks section covering the failures security actually asks about: data exposure, proxy/TLS interception, and legacy-system integrationYou’re mid-incident: error rates are spiking, and you need Azure logs, a Jira ticket, a Confluence runbook update, and a Slack heads-up. Without integration that’s five browser tabs and a lost train of thought. MCP servers let the agent orchestrate all of it from your IDE or terminal.
MCP matters in a corporate setting for one reason above features: it inherits your existing permission model instead of inventing a new one. An MCP server connects with your OAuth identity, so the agent can only touch what you can already touch, and every action is attributable to your account in the audit log. That is the sentence that gets security to sign off.
All three tools speak MCP. The server definitions are portable; only the config file location differs.
Authentication & SSO
Okta, Auth0, and Keycloak bridge your identity provider into MCP. The agent authenticates with corporate credentials over OAuth 2.1 + PKCE and inherits your existing roles and group memberships.
Project Management
Atlassian’s remote MCP server gives OAuth-secured access to Jira and Confluence. Create tickets, update runbooks, and query sprint status without a context switch.
Cloud Infrastructure
Azure and GitHub MCP servers bring DevOps into the loop: query logs, inspect CI runs, open PRs, and check deployment status through natural-language commands.
Monitoring & Quality
Sentry and SonarQube MCP servers wire observability and code quality into the workflow. Pull error context, triage hotspots, and check quality gates inline.
The MCP authorization spec mandates OAuth 2.1 with PKCE (SHA-256) for HTTP servers, so corporate SSO is a first-class citizen, not a workaround. The setup below uses the official Auth0 MCP server as the example; the same config shape applies to any server.
MCP server definitions are identical in substance across all three tools, an mcpServers block keyed by server name. Only the file location and the add command differ:
Cursor reads MCP servers from .cursor/mcp.json in the project (or ~/.cursor/mcp.json globally). Add the Auth0 server:
{ "mcpServers": { "auth0": { "command": "npx", "args": ["-y", "@auth0/auth0-mcp-server", "run"] } }}On first use Cursor launches the OAuth flow in your browser; you authenticate with corporate credentials and inherit your Auth0 permissions.
Claude Code stores project servers in .mcp.json (commit it to share with the team). Add the local stdio server with one command:
claude mcp add auth0 -- npx -y @auth0/auth0-mcp-server runThe first prompt that touches Auth0 triggers the device-authorization flow against your tenant.
Codex stores MCP servers in ~/.codex/config.toml under a [mcp_servers.<name>] table:
[mcp_servers.auth0]command = "npx"args = ["-y", "@auth0/auth0-mcp-server", "run"]Codex authenticates on first use the same way. Note the underscore: it’s mcp_servers in TOML, not mcpServers.
For a remote, OAuth-native server such as Atlassian’s, you skip the local process entirely and point the tool at the HTTPS endpoint:
{ "mcpServers": { "atlassian": { "url": "https://mcp.atlassian.com/v1/mcp" } }}claude mcp add --transport http atlassian https://mcp.atlassian.com/v1/mcp[mcp_servers.atlassian]url = "https://mcp.atlassian.com/v1/mcp"These are the demos that get a pilot approved. Each is tool-agnostic, the prompt is what matters, and it pastes into Cursor’s chat, the claude REPL, or codex interchangeably.
You’re on-call, error rates just jumped, and the clock is running. Chain the work instead of tab-hopping.
Security wants a quarterly pass over the main repositories. Turn a day of manual work into a single chain.
The agent reads only what your OAuth identity can see, and each Jira task it opens is attributed to you, exactly what the audit is meant to confirm.
The fire is out; now reconstruct what happened. This is where pulling four systems together saves the most time.
Your initial four. Each card shows why it earns a slot and how to add it.
Microsoft Learn Docs MCP
Why: Grounds the agent in current Microsoft docs, essential for .NET and Azure work where training data goes stale.
Add it (remote HTTP, identical across tools — Claude Code shown):
claude mcp add --transport http mslearn https://learn.microsoft.com/api/mcpSample prompt: “Review this C# code against current .NET best practices from Microsoft Learn.”
GitHub MCP Server
Why: PR workflows, Actions monitoring, and issue triage. Use the official remote server with OAuth — the old @modelcontextprotocol/server-github npm package is deprecated.
Add it (OAuth on first use):
claude mcp add --transport http github https://api.githubcopilot.com/mcp/Sample prompt: “Show me all failing CI runs this week and open issues for the broken tests.”
Atlassian Remote MCP
Why: OAuth-secured Jira and Confluence with zero local setup.
Add it:
claude mcp add --transport http atlassian https://mcp.atlassian.com/v1/mcpSample prompt: “Summarize all bugs fixed in the current sprint and update our release-notes page.”
Azure MCP Server
Why: One server, many Azure connectors (Monitor, PostgreSQL, SQL, Cosmos DB) behind natural language.
Add it (local stdio):
claude mcp add azure -- npx -y @azure/mcp@latest server startSample prompt: “Query Log Analytics for authentication failures and flag any publicly accessible storage accounts.”
Not every capability needs a persistent server. Agent Skills are lighter-weight, single-purpose augmentations installed with one universal CLI from vercel-labs/skills:
npx skills add vercel-labs/agent-skillsThe trade-off: reach for a skill when you want a focused, shareable behavior (a code-review checklist, a deployment runbook) that needs no live connection; reach for an MCP server when you need a persistent, authenticated link to a system of record like Jira or Azure. Skills work across Claude Code, Cursor, and Codex from the same install.
Most enterprises route external traffic through a proxy. All three tools honor the standard HTTPS_PROXY / HTTP_PROXY / NO_PROXY environment variables, so the setup is identical, set them in the shell that launches the tool:
export HTTPS_PROXY=http://corporate-proxy:8080export HTTP_PROXY=http://corporate-proxy:8080export NO_PROXY=localhost,127.0.0.1,.internal.company.comCursor (an Electron app) inherits these when launched from a terminal with them set; Claude Code and Codex read them directly. If your proxy performs TLS interception, point Node at your corporate root CA so certificate validation still passes:
export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/corporate-root-ca.pemThe most common blocker, and the one MCP answers well:
Symptom: MCP servers and model calls fail with UNABLE_TO_GET_ISSUER_CERT_LOCALLY or self-signed certificate in certificate chain. Cause: the proxy re-signs TLS with a corporate CA that Node doesn’t trust. Fix: set NODE_EXTRA_CA_CERTS to your corporate root CA bundle (above). Never disable certificate validation with NODE_TLS_REJECT_UNAUTHORIZED=0 — that defeats the interception your security team relies on and will fail the review.
No off-the-shelf server exists for your internal API? Build a thin MCP server. The official SDKs are attribute/decorator-driven, you expose a method, not subclass a base class. In C# with the official ModelContextProtocol NuGet package:
[McpServerToolType]public static class LegacyOrderTools{ [McpServerTool, Description("Look up an order in the legacy ERP by ID.")] public static string GetOrder(string orderId) => LegacyErpClient.FetchOrder(orderId); // wrap your existing API}
// Program.cs — register and serve over stdiobuilder.Services .AddMcpServer() .WithStdioServerTransport() .WithToolsFromAssembly();For SOAP or other legacy protocols, have the agent draft a REST facade first, then wrap that:
Lead with read-only operations so the first weeks generate trust, not incidents:
Codify access in a policy file your team can review and version:
## Approved MCP servers- Microsoft Learn (read-only docs): all developers- GitHub MCP: all developers- Atlassian MCP: team leads and above- Azure MCP: DevOps team only- Auth0 MCP: security-team approval required
## Usage guidelines- Authenticate through corporate SSO only- No production credentials in prompts- Confirmation required before any infrastructure write- AI-generated code is reviewed before mergeEnterprise AI adoption isn’t about replacing developers; it’s about removing the tab-hopping between the systems they already use. MCP gives Cursor, Claude Code, and Codex a secure, permission-inheriting bridge to that ecosystem. Start read-only, attribute every action, measure your own baseline, and scale what the numbers justify.