Borrowing it
Nothing to install: this file belongs to maphnet/jc-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/maphnet/jc-mcp/main/CLAUDE.mdgit clone --depth 1 https://github.com/maphnet/jc-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/maphnet/jc-mcp/claude-md)<a href="https://agentmods.dev/instructions/maphnet/jc-mcp/claude-md"><img src="https://agentmods.dev/badge/instructions/maphnet/jc-mcp/claude-md/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/maphnet/jc-mcp/claude-md"><img src="https://agentmods.dev/badge/instructions/maphnet/jc-mcp/claude-md.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.02086 | $0.02086 |
| Opus 5.5 | $0.00834 | $0.00834 |
| Sonnet 5.5 | $0.00417 | $0.00417 |
| Haiku 4.5 | $0.00209 | $0.00209 |
Grade A, and why
jc-mcp CLAUDE.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 107 lines — stays where its author put it; the contents beside it link to each section on GitHub.
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
jc-mcp (@maphnet/jc-mcp) is a Jira and Confluence MCP (Model Context Protocol) server focused on optimizing token efficiency for everyday tasks. Unlike general-purpose Atlassian MCP servers, this server is designed to return concise, structured responses that minimize token consumption while preserving the information LLM agents actually need.
Development Commands
npm install # Install dependencies
npm run build # Compile TypeScript to dist/
npm start # Run the compiled server (stdio transport)
npm run dev # Run with auto-reload (tsx watch)
npm test # Run tests once (vitest)
npm run test:watch # Run tests in watch mode
npx tsc --noEmit # Type-check without emitting
Publishing to npm
npm version patch # bump version (patch / minor / major)
npm run build # compile TypeScript
npm publish --access public # publish @maphnet/jc-mcp (scoped → needs flag)
git push && git push --tags # push version commit + tag created by npm version
npm version also syncs server.json automatically (via the version script). The server's reported version is read from package.json at runtime; never hard-code it.
Requires npm login if not already authenticated.
Architecture
The server uses @modelcontextprotocol/sdk with stdio transport. Tool implementations live in src/tools/, each exporting a register(server, client) function and a testable handle* function. Transport is stdio by default; JCM_TRANSPORT=http serves MCP Streamable HTTP from src/http-transport.ts (one McpServer per client session, one shared AtlassianClient).
src/
├── index.ts # Entry: loadConfig → stdio (default) or HTTP (JCM_TRANSPORT=http) + signal handling
├── server.ts # createServer(client): McpServer — registers all tools (one per stdio process / HTTP session)
├── http-transport.ts # Streamable HTTP: session map, Host check, idle sweep, close() handle
├── config.ts # Env var loading (ATLASSIAN_URL, EMAIL, TOKEN, CLOUD_ID)
├── elicitation.ts # Write-confirmation gate (JCM_CONFIRM_WRITES env flag + MCP elicitation)
├── client.ts # HTTP client for Jira/Confluence REST APIs (Basic auth)
├── adf-to-markdown.ts # ADF + Confluence storage format → markdown converter
├── markdown-to-adf.ts # Markdown → ADF (Jira) & XHTML storage (Confluence) converter
├── types.ts # Lean response type definitions
├── lean-parent.ts # toLeanParent: Jira parent → {key, summary, type} | null (shared by getIssue/getIssues/searchIssues)
└── tools/ # One file per MCP tool (25 tools total)
├── get-issue.ts # Priority 1: Jira issue read (flattened, ADF→markdown, incl. parent)
├── get-issues.ts # Batch read ≤50 keys via one JQL search plus one fallback GET per omitted key: request order, {key, error} for keys that stay missing, `movedTo` for moved keys, capped description/last 3 comments + truncation marker
├── get-issue-changelog.ts # Field-change history, oldest first, `since` filter + paging ({entries, truncated})
├── get-attachment-download-link.ts # On-demand temporary Jira attachment URL (no file bytes)
├── get-transitions.ts# Priority 1: Workflow transitions ([{id, name}])
├── edit-issue.ts # Priority 1: Issue field update + incremental `update` ops ({ok, key})
├── transition-issue.ts# Priority 1: Workflow state change
├── convert-issue-type.ts # Priority 1: Issue type conversion via async bulk move API + queue poll ({ok, keys, issueType, parentKey})
├── add-to-active-sprint.ts # Priority 2: Add issue to active scrum sprint via Agile API ({ok, key, sprintId, sprintName, boardId} | skipped | candidates)
├── create-issue.ts # Priority 2: Issue creation ({key, url})
├── add-comment.ts # Priority 2: Comment (markdown → ADF)
├── search-issues.ts # Priority 2: JQL search (lean results incl. type + parent; zero results → jql/parse, invalid JQL throws)
├── get-current-user.ts # User info: authenticated user ({accountId, displayName, email, active})
├── lookup-user.ts # User lookup: find user by email ([{accountId, displayName, email, active}])
├── create-version.ts # Version management: create release ({id, name})
├── list-versions.ts # Version management: list releases ([{id, name, released, releaseDate}])
├── release-version.ts# Version management: mark released ({ok, id, name})
├── add-issue-link.ts # Issue links: create link, issueKey is source/outward (A blocks B) ({ok, issueKey, targetKey, linkType})
├── remove-issue-link.ts # Issue links: delete link ({ok, linkId})
├── get-issue-links.ts# Issue links: list links ([{id, type, inwardIssue?, outwardIssue?}])
├── get-article.ts # Priority 3: Confluence page read
├── lookup-space.ts # Priority 3: Confluence space key → numeric ID ({id, key, name})
├── create-article.ts # Priority 3: Confluence page creation
├── update-article.ts # Priority 3: Confluence page update
└── search-articles.ts# Priority 3: Confluence CQL search
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- today Changed · +1 lines · +65 tokens per session a61507a00dc9
- 3d ago Changed · +1 lines · +59 tokens per session 71e2c3a23d16
- 6d ago Changed · +12 tokens per session c6c07946fdde
- 17d ago Changed · +2 lines · +44 tokens per session b17779dfb83c
- 19d ago Changed · +1 lines · +43 tokens per session e29c19277587
- 20d ago Changed · +3 lines · +178 tokens per session 4b738a3f21a9
- 21d ago Changed · +2 lines · +75 tokens per session ece41bbcb247
- 24d ago Changed · +8 lines · +286 tokens per session 956aaa2ed688
- 2mo ago Changed · +2 lines · +52 tokens per session 26dd11f19e43
- 2mo ago First seen · 87 lines · 1,272 tokens per session scan A 6584d3bd76f5
jc-mcp CLAUDE.md is an instructions file published in the GitHub repository maphnet/jc-mcp (0 stars, last pushed yesterday), licensed MIT. It adds 2,086 tokens to every session, about $0.0083 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
jc-mcp CLAUDE.md compared with instructions from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| jc-mcp CLAUDE.mdmaphnet/jc-mcp | Instructions file | 0 | yesterday | MIT | A | 2,086 | Claude Code |
| vscode buildNext.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 9,719 | GitHub Copilot |
| next.js AGENTS.mdvercel/next.js | Instructions file | 143k | yesterday | MIT | A | 7,461 | Codex, OpenCode |
| langchain AGENTS.mdlangchain-ai/langchain | Instructions file | 149k | yesterday | MIT | A | 4,680 | Codex, OpenCode |
| vscode oss-third-party-notices.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 5,516 | GitHub Copilot |
| vscode copilot-instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 3,093 | GitHub Copilot |
| deepseek-harness AGENTS.mddeepseek-ai/deepseek-harness | Instructions file | 274k | 2d ago | MIT | A | 4,313 | Codex, OpenCode |