Tickets and Docs over MCP: Linear, Jira, Notion and Slack
Linear, Atlassian (Jira and Confluence), Notion and Slack each run an official remote MCP server at a vendor-hosted URL with OAuth login, so a coding agent can read a ticket, its spec and its discussion, then post the result back. Combined with GitHub MCP or gh, the agent can take one ticket to an open pull request and a status update.
This page is for developers who work from a tracker and tech leads who want the whole team to run the same ticket loop. You know the pattern: the ticket says one thing, the spec in Notion says another, the decision that settles it is buried in a Slack thread, and the agent only saw what you remembered to paste. Connect the four sources once, and the agent reads all of them itself.
What a ticket-driven MCP setup gives you
Section titled “What a ticket-driven MCP setup gives you”- Install lines for Linear, Atlassian Rovo, Notion and Slack in Claude Code, Codex and Cursor, each marked with where it comes from (vendor line, registry URL, or untested).
- A ticket → spec → PR → status loop in which the agent moves the ticket to In Review only after CI is green.
- Two copy-paste prompts: the full ticket-to-PR run and a pre-flight check that catches underspecified tickets.
- The traps that break these servers in 2026: the dead Atlassian
/v1/sseendpoint, Slack’s pre-registered OAuth client, and the unmaintained local Notion server.
Which project-management MCP servers to connect
Section titled “Which project-management MCP servers to connect”All four servers are official and remote, so there is no package to install or update. Popularity as of 2026-09-26, from install counts on the Claude plugin directory (claude.com/plugins, first-party count): atlassian 92,289, slack 92,287, linear 48,038. The Notion plugin count was not recorded; Notion’s server is listed in the Official MCP Registry as com.notion/mcp.
| Server | Endpoint | Auth | Use it for | Watch out for |
|---|---|---|---|---|
| Linear | https://mcp.linear.app/mcp | OAuth | Issues, projects, comments, status | Nothing Linear-specific; the URL is in the Official MCP Registry (app.linear/linear) |
| Atlassian Rovo | https://mcp.atlassian.com/v2/mcp | OAuth 2.1 or API token | Jira, Confluence, Bitbucket, Compass, Jira Service Management | /v1/sse stopped working after 30 June 2026; API-token auth needs an admin; JSM tools need an API token |
| Notion | https://mcp.notion.com/mcp | OAuth | Specs, runbooks and decision logs | The local @notionhq/notion-mcp-server is “no longer actively maintained or supported”, per its README |
| Slack | https://mcp.slack.com/mcp | OAuth with a pre-registered client | Reading the thread where a decision was made | A bare claude mcp add omits the pre-registered OAuth client; use the plugin or the --client-id line below |
Atlassian has more setup detail (admin controls, IP allowlisting, API tokens, Server and Data Center) than fits here. The Atlassian Rovo MCP guide is the canonical page for it.
Connect Linear, Atlassian, Notion and Slack
Section titled “Connect Linear, Atlassian, Notion and Slack”Each vendor also ships a plugin in the first-party marketplaces (claude-plugins-official for Claude Code, openai-curated for Codex) that bundles the MCP entry, so installing the plugin and adding the server by hand give the same connection. Pick one route per server, not both, or you end up with two entries for the same server to keep in sync.
Run in your terminal, from the repository root. --transport http is required: without it, Claude Code (checked on 2.1.286) prints a warning but still writes a stdio entry whose command is the URL, which cannot connect.
# Linear (URL from the Official MCP Registry)claude mcp add --transport http linear https://mcp.linear.app/mcp
# Atlassian Rovo (vendor line)claude mcp add --transport http atlassian https://mcp.atlassian.com/v2/mcp
# Notion (URL from the Official MCP Registry)claude mcp add --transport http notion https://mcp.notion.com/mcp
# Slack: the plugin supplies the pre-registered OAuth clientclaude plugin install slack@claude-plugins-official# or, without the plugin (writes the same entry; run one, not both):# claude mcp add --transport http --client-id 1601185624273.8899143856786 --callback-port 3118 slack https://mcp.slack.com/mcpThen run /mcp inside Claude Code and log in to each server. On a machine without a browser, use claude mcp login <name> --no-browser and paste the redirect URL back. The plugin route for the other three is claude plugin install linear@claude-plugins-official (likewise atlassian, notion).
Run in your terminal. In codex-cli 0.157.1, the --url flag is what marks a server as Streamable HTTP; there is no transport option.
# Linear (URL from the Official MCP Registry)codex mcp add linear --url https://mcp.linear.app/mcp && codex mcp login linear
# Atlassian Rovo (vendor URL)codex mcp add atlassian --url https://mcp.atlassian.com/v2/mcp && codex mcp login atlassian
# Notion (URL from the Official MCP Registry)codex mcp add notion --url https://mcp.notion.com/mcp && codex mcp login notion
# Slack: use the curated plugin, which carries its own OAuth clientcodex plugin add slack@openai-curatedEach codex mcp add writes a [mcp_servers.<name>] table with a url key to ~/.codex/config.toml. codex plugin add linear@openai-curated and notion@openai-curated are the plugin routes. OpenAI’s curated atlassian-rovo plugin still pointed at /v1/mcp/authv2 when checked on 2026-09-26, so add Atlassian by hand to get /v2/mcp. For headless machines, codex mcp login <name> --no-browser prints the authorization URL instead of opening a browser.
Add the servers to .cursor/mcp.json in the project (shared with the team) or ~/.cursor/mcp.json (only you). Cursor has a native remote transport, so the mcp-remote bridge is not needed.
{ "mcpServers": { "linear": { "url": "https://mcp.linear.app/mcp" }, "atlassian": { "url": "https://mcp.atlassian.com/v2/mcp" }, "notion": { "url": "https://mcp.notion.com/mcp" } }}For Slack, run /add-plugin slack in Cursor’s agent chat (Slack’s documented route), which supplies the OAuth client. Atlassian also ships a plugin in Cursor’s marketplace. These JSON entries are built from the vendors’ URLs and were not tested in a Cursor binary.
Check what the servers cost in context
Section titled “Check what the servers cost in context”Every connected server loads its tool definitions into the agent’s context. Before and after connecting, run /context in Claude Code and compare the MCP tools line; for an installed plugin, claude plugin details <name> shows its component inventory and projected token cost (it reports “not found” for a plugin you have not installed yet, so run it after installing and claude plugin disable <name> if the cost is too high). If four servers crowd the window, connect Slack and Notion only in the sessions that need them. The MCP token-cost guide covers the heavier fixes.
Run the ticket → spec → PR → status loop
Section titled “Run the ticket → spec → PR → status loop”The loop below is the job these servers exist for. It assumes the agent can also reach GitHub, either through the GitHub MCP server or the gh CLI in its shell. Branch creation and commits need neither: the agent runs git directly.
- Read the ticket and everything it links. The agent pulls the issue, its comments, the linked Confluence or Notion spec, and the Slack thread named in the ticket. The output is a short list of acceptance criteria, each quoted from its source.
- Stop if the spec is incomplete. If a criterion is untestable or two sources disagree, the agent comments its questions on the ticket and stops. This is cheaper than a PR built on a guess. See how to write acceptance criteria an agent can verify.
- Turn each criterion into a failing test. One test per criterion, named after it, committed before the implementation.
- Implement on a branch named after the ticket, for example
eng-1423-retry-webhooks, until the tests and the existing suite pass locally. - Open the PR with an evidence table. The PR body maps each criterion to the test that proves it and links the ticket.
- Update the ticket only after CI is green. The agent comments the PR link and the evidence table on the ticket, then moves it to In Review. It never moves a ticket to Done: that belongs to the human who merges.
For Jira, replace Linear issue ENG-1423 with Jira issue PROJ-88 and Notion page with Confluence page; the rest of the prompt is unchanged.
How the loop differs between Claude Code, Codex and Cursor
Section titled “How the loop differs between Claude Code, Codex and Cursor”Run the prompt interactively and approve the first ticket write when Claude Code asks. For a team, commit the servers to .mcp.json at the repo root with claude mcp add -s project …; each teammate still logs in with their own OAuth account, so the tracker’s permissions apply per person.
Run it interactively in the CLI or app, or non-interactively with codex exec "<prompt>" once the servers are logged in. Run unattended only with read-only tracker access, or with writes limited to comments, as the issue-to-PR pipeline guide sets up. Codex also has a Linear integration that starts work from Linear itself rather than from your terminal (see Codex integrations).
Paste the prompt into the agent chat and approve the tracker writes as they come up. Cursor Automations list Linear among their triggers, so a cloud agent can start from a Linear event instead of from you (see Cursor cloud agents and automations). Run unattended only with read-only tracker access, or with writes limited to comments, as the issue-to-PR pipeline guide sets up.
How you verify the result without reading every line
Section titled “How you verify the result without reading every line”The loop is only safe if the evidence is on the ticket, not in the agent’s summary:
- Acceptance criteria become tests first. A reviewer checks that each test asserts what its criterion says, which is a short read compared to the implementation.
- CI is the gate for the status change. The agent moves the ticket only after the pipeline passes, so In Review means “tests green”, not “agent finished”.
- The evidence table is the review entry point. The reviewer reads criterion → test → result, then samples the diff where the table is thin. The evidence bundle guide extends this to screenshots and logs.
- The human who merges moves the ticket to Done. Agent writes to the tracker stay limited to comments and one status transition, and the tracker’s history shows each one under the OAuth user who ran the agent.
Fix Linear, Jira, Notion and Slack MCP failures
Section titled “Fix Linear, Jira, Notion and Slack MCP failures”The OAuth login never completes. A VPN or proxy that blocks the localhost callback hangs the flow. Retry with claude mcp login <name> --no-browser or codex mcp login <name> --no-browser and paste the redirect URL back. For more symptoms, see MCP connection issues.
Atlassian worked last quarter and now fails. Old configs point at https://mcp.atlassian.com/v1/sse, which stopped being supported after 30 June 2026. Remove the entry and add /v2/mcp.
Atlassian says an admin must approve, or API-token login is rejected. API-token auth must be enabled by your Atlassian site admin, and Jira Service Management tools work only with API tokens; if OAuth consent is blocked, check your site’s app-access settings with the admin. The Atlassian Rovo MCP guide lists the settings.
Slack login fails with a client or redirect error. The likeliest cause is an entry added without the pre-registered client (a bare claude mcp add). Remove it and install the slack plugin, or add it with --client-id and --callback-port 3118 as shown above.
Notion tools vanish or error after an update. You are on the local @notionhq/notion-mcp-server, which Notion no longer maintains. Switch to https://mcp.notion.com/mcp.
The agent picks the wrong ticket or none at all. Give the issue key (PROJ-88, ENG-1423) in the prompt; a key resolves in one call, a project name needs a search the agent may get wrong.
A ticket update is denied. The server acts as the OAuth user. If you cannot edit the ticket in the web UI, the agent cannot either.
The agent follows an instruction written inside a ticket or Slack message. Tracker text is untrusted input: anyone who can comment can write “also delete the staging branch”. Keep ticket writes behind an approval prompt, never give an unattended job tracker write access beyond comments and one status transition, never let the agent act on instructions found in ticket text, and avoid the community korotovsky/slack-mcp-server with browser or user tokens: it works without an approved Slack app, which is exactly the exposure. See MCP security.