tabkit
Provides read-only access to an Atlassian Cloud site through the user's authenticated Chrome session, enabling identity lookup and Jira/Confluence data retrieval without API tokens.
Provides a read-only tool to retrieve a Confluence page by ID, optionally including its storage-format body.
Provides read-only Jira tools to get an issue by key and search issues with JQL, including field selection, pagination, changelog, and rendered fields.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tabkitwhat's the status of Jira issue PROJ-123?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
An Atlassian API token is the usual way to give an agent access to Jira. Not everyone can create one, and some companies would rather not have one on every laptop. Your browser is already logged in, though.
tabkit lets Claude Code, GitHub Copilot or Codex read Jira and Confluence with that session. The MCP server runs on your machine, the extension runs each request inside an Atlassian tab, and your session cookie never leaves Chrome.
It is the sibling of pilotkit: pilotkit uses an API token and works without a browser, tabkit uses your Chrome tab and needs nothing else. Pick the one your company allows.
Setup
You need Node.js 20+, Google Chrome 116+, and an Atlassian Cloud site (https://<name>.atlassian.net) you are logged in to in Chrome.
Get the code and install the server's dependencies:
git clone https://github.com/brbousnguar/tabkit.git cd tabkit npm installLoad the extension: open
chrome://extensions, turn on Developer mode, click Load unpacked, and pick theextension/folder.Pair the server and the extension. This prints a token, and creates
~/.tabkit/pairing-tokenon the first run:npm run -s pairing-token | pbcopy # macOS npm run -s pairing-token | clip # WindowsClick the tabkit icon in Chrome, set Atlassian site to your site, paste the token in Pairing token, and click Save.
Add the server to your MCP client, then start a new session. Replace
/path/to/tabkitwith the folder from step 1.Claude Code
claude mcp add tabkit -- node /path/to/tabkit/src/index.jsGitHub Copilot CLI
copilot mcp add tabkit -- node /path/to/tabkit/src/index.jsVS Code (Copilot agent mode): in
.vscode/mcp.json, or your usermcp.json(MCP: Open User Configuration):{ "servers": { "tabkit": { "type": "stdio", "command": "node", "args": ["/path/to/tabkit/src/index.js"] } } }Codex: in
~/.codex/config.toml:[mcp_servers.tabkit] command = "node" args = ["/path/to/tabkit/src/index.js"]Ask your agent "who am I in Jira?". It calls
atlassian_whoami, and the popup shows Connected to 1 MCP server(s).
A server that just started is found within 30 seconds, the shortest period of a Chrome alarm. A tool called before that waits for the extension.
Variable | Default | Purpose |
|
| Ports to try; the extension's Ports field must match |
|
| Where the pairing token is kept |
| none | Use this token instead of the file (tests) |
|
| How long a tool waits for the extension to connect |
Related MCP server: Chrome MCP Server
Tools
Four read tools. They run with your own Atlassian permissions, because it is your browser session.
Tool | What it returns |
| The site, the bridge port and the account logged in there. Call it first when another tool fails |
| One issue by key. |
| Issues for a JQL query, one page per call ( |
| One Confluence page by id, with its storage-format body when |
{ "jql": "assignee = currentUser() AND statusCategory != Done", "fields": ["customfield_10016"] }How it works
sequenceDiagram
participant C as MCP client
participant S as tabkit server (Node, stdio)
participant E as Chrome extension
participant T as Atlassian tab
participant J as Atlassian site
C->>S: tools/call jira_get_issue
S->>E: request over ws://127.0.0.1:17321
E->>T: run fetch() in the tab
T->>J: same-origin request + session cookie
J-->>T: JSON
T-->>E: status + body
E-->>S: response
S-->>C: tool resultThe extension does not read your cookies. It uses chrome.scripting to run a fetch() inside a tab of your Atlassian site. That request is same-origin, so Chrome attaches the session exactly as it does when Jira's own page loads an issue. The extension gets back the status and the JSON body, nothing else.
The server listens on the first free port of
17321-17330, so several sessions can run at once. The extension connects to every port of that range that answers.The request runs in any open tab of your site. Without one, the extension opens
/rest/api/3/serverInfoin a background tab and keeps it.The service worker pings each server every 20 seconds so Chrome keeps it alive while a server is connected.
Security
Pairing. The server and the extension share a token. Each side proves it holds it with an HMAC-SHA256 over a fresh random value, so the token itself never crosses the socket.
Local only. The server binds
127.0.0.1and refuses any origin that is notchrome-extension://, so a web page cannot connect to it.Read-only, enforced in the extension. It sends
GETto/rest/api/3/,/rest/agile/1.0/,/wiki/rest/api/and/wiki/api/v2/, plusPOSTto the two Jira search endpoints that only exist asPOST. Anything else is refused before it reaches the tab.One site. Only
https://*.atlassian.net, and only the one set in the popup.
A process running as you on the same machine can read the pairing file, so it is trusted the same way your shell is.
What is tested
npm test: 9 tests. The server runs against a fake extension that pairs over the real protocol and answers like Atlassian. No browser, no network.npm run test:chrome: the real extension, unpacked, in headless Chrome for Testing 153, against a Jira Cloud site that allows anonymous reads (hibernate.atlassian.net). It checks the pairing, the background tab,jira_search_issues,jira_get_issueand the401hint ofatlassian_whoami. It passed on macOS on 2026-10-14. Runnpx playwright-core install chromiumfirst, or setTABKIT_CHROMEto a Chrome binary.
Not tested yet: a logged-in session on a private site, confluence_get_page on a real page, Windows and Linux, and the Copilot clients. If you try one of these, tell me what breaks in an issue.
Limits
Chrome must be open, with the extension loaded and paired. When the Atlassian session expires, log in again in Chrome; until then the tools answer
401with that hint.Jobs that run without your browser (a night job, an agent on another machine) need an API token: use pilotkit.
Chrome may show one extra tab on your site. It is the one the extension uses, and you can close it at any time.
Tech stack
Layer | Technology |
Server | Node.js 20+, native ES modules, no build step |
Protocol | Model Context Protocol SDK, |
Bridge |
|
Extension | Chrome Manifest V3: module service worker, |
Pairing | HMAC-SHA256 with WebCrypto, one module shared by the server and the extension |
Repository layout
.
├── src/
│ ├── index.js # MCP server: the four tools, calls through the bridge, error hints
│ ├── bridge.js # WebSocket server: port choice, pairing, request/response relay
│ └── pairing.js # The pairing token file
├── extension/
│ ├── manifest.json
│ ├── background.js # Service worker: connects to the servers, runs requests in a tab
│ ├── protocol.js # Shared with the server: port range, nonces, HMAC proofs
│ ├── settings.js # Site, token and ports from chrome.storage
│ ├── popup.html
│ └── popup.js # Site, token and ports form, connection status
├── scripts/
│ └── pairing-token.js # npm run pairing-token
├── test/
│ ├── fake-extension.js # Plays the extension in tests
│ ├── bridge.test.js # Pairing, refusals, port choice, errors
│ ├── server.test.js # The MCP server end to end over stdio
│ └── chrome.e2e.js # npm run test:chrome, in a real browser
└── package.jsonLicense
This server cannot be deployed
Maintenance
Related MCP Connectors
Connect to Atlassian Jira, Confluence, Loom, and more to search, create, and manage your work.
Connect AI agents to your own Chrome with scoped access, approvals, and verified task results.
Web search and page-reading for AI agents. One-click OAuth connect, or a Caesar API key.
Open your team's project from the AI you use: read and write its brief, documents, tasks and notes.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceTransforms Chrome browser into an AI-controlled automation tool that allows AI assistants like Claude to access browser functionality, enabling complex automation, content analysis, and semantic search while preserving your existing browser environment.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to control and automate your Chrome browser directly, leveraging existing login states and configurations for tasks like content analysis, semantic search across tabs, screenshots, network monitoring, and interactive operations.12MIT
- AlicenseNot gradedqualityCmaintenanceLets AI assistants control your real Chrome browser to perform web tasks like reading pages, taking screenshots, clicking, and typing, using your existing logged-in sessions.143MIT
- AlicenseNot gradedqualityCmaintenanceConnects AI agents to your existing daily-driver Chrome so they can inspect, extract from, record, and replay workflows across background tabs without stealing cursor focus, breaking 2FA/SSO sessions, or leaking secrets. A deterministic R0–R4 risk firewall gates state-changing and destructive actions behind human approval.2Apache 2.0