Labsco
MCP SERVER

Search, edit and administer Jira issues from Cursor, in a container, with writes off by default.

Project & Task Management
Summary
Writes are a deliberate switch, not a default.

Two design choices carry this: write tools stay unregistered until you set the flag, and the HTTP transport refuses to lend out the operator's own credential. The authors are explicit that this began as a learning exercise and point at more mature Jira servers — take that at face value, and take the token handling as the part worth copying.

What it is

A containerised Python MCP server for Jira, built for Cursor and usable by any MCP client. It runs from a published image with your Jira personal access token supplied through an env file, and can also serve HTTP so callers bring their own token instead of the server's.

What you get
  • Issues — `get_jira` by key, `search_issues` with JQL, `create_issue`, `update_issue`, `delete_issue`
  • Comments and assignment — `get_issue_comments`, `add_comment`, `delete_comment`, `assign_issue`, `unassign_issue`
  • Workflow — `transition_issue` to a new status, `get_issue_transitions` for what is available, `add_issue_labels`, `remove_issue_labels`
  • Projects — `list_projects`, `get_project`, `get_project_components`, `get_project_versions`, `get_project_roles`, `get_project_permission_scheme`, `get_project_issue_types`
  • Boards and sprints — `list_boards`, `list_sprints`, `get_sprint`, `get_sprints_by_name`
  • Users — `search_users`, `get_user`, `get_current_user`, `get_assignable_users_for_project`, `get_assignable_users_for_issue`
  • Writes are gated: with the default `JIRA_ENABLE_WRITE=false` Cursor shows 20 tools; set it to true and you get 30
Requirements

Podman (or another container runtime) and a Jira personal access token. Create a `.env` with the token and register `podman run -i --rm --env-file <path> quay.io/sbaird/jira-mcp:latest` in your client. Developers can build locally with `make setup`, which builds the image, configures Cursor and creates `~/.rh-jira-mcp.env`. For HTTP use, run `python server.py --transport http --port 3075`; in that mode the server ignores its own `JIRA_API_KEY` and requires each caller to send their own Jira token as a Bearer header, so one person's account is not shared with everyone who can reach the service. MIT.

Setup effort

Build from source — clone the repository and build it, then point your client at the binary