io.github.ivanlai/primer-mcp
PYPI · PRIMER-MCP · SCANNED AUG 19
A Jira-lite MCP server that guides planning-first workflows for AI-assisted development.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 2 of 33 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (MIT License) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 0 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability82
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 1811 tokens (~106/item across 17 items; 17 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management17
- Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
pypi · primer-mcp
claude mcp add ivanlai-primer-mcp -- uvx primer-mcp
codex mcp add ivanlai-primer-mcp -- uvx primer-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ivanlai-primer-mcp": {
"type": "local",
"command": [
"uvx",
"primer-mcp"
],
"enabled": true
}
}
} openclaw mcp add ivanlai-primer-mcp --command uvx --arg primer-mcp
mcp_servers:
ivanlai-primer-mcp:
command: "uvx"
args: ["primer-mcp"] {
"mcpServers": {
"ivanlai-primer-mcp": {
"command": "uvx",
"args": [
"primer-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 18 Aug 26 +2
- Stability: unverified → 0.13 ▲ functional
- Package version: 0.1.3 → 0.1.4 functional
- 15 Aug 26 +15
- Malware scan: unverified → pass ▲ security
- 14 Aug 26 50
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 19 Aug 2026 · Analysed pypi/primer-mcp@0.1.4
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Dependencies 33 packages
| Packages resolved | 33 |
|---|---|
| Stale | 1 |
| No linked repository | 1 |
| Tree resolution | Complete |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
complete_spike ~52
Close a spike by recording its findings — the answer to the question it was investigating and any recommendations. Works from any status.
| Name | Type | Req | Description |
|---|---|---|---|
| findings | string | yes | – |
| spike_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
complete_task ~106
Mark a task as completed with notes on what was done. The notes parameter is a terse one-liner for the frontmatter field; write a fuller summary (approach, key changes, decisions) into the ## Completion Notes body section of the ticket separately. Ideally call start_task first, but this works from any status. After this, call verify_task with evidence to finalise.
| Name | Type | Req | Description |
|---|---|---|---|
| notes | string | yes | – |
| task_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_spike ~84
Create a Spike under a story — a timeboxed investigation to answer a specific question before committing to an implementation approach. The parent story must already exist. When done, call complete_spike with your findings.
| Name | Type | Req | Description |
|---|---|---|---|
| question | string | yes | – |
| story_id | string | yes | – |
| timebox | string | yes | – |
| title | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_story ~182
Create a Story under an epic — a deliverable with acceptance criteria. The epic must exist — if one hasn't been created yet, call plan_epic first. The user will have described their goals; use that to create the epic, asking for clarification if needed. If no ADR has been recorded, the response will suggest capturing decisions first, but the story is still created. Pass adr_ids to link the story to the architectural decisions that govern it. Each ADR must exist and belong to the same epic. After creating stories, present the plan to the user and wait for their agreement before creating tasks or starting work.
| Name | Type | Req | Description |
|---|---|---|---|
| acceptance_criteria | – | – | – |
| adr_ids | – | – | – |
| definition_of_done | – | – | – |
| epic_id | string | yes | – |
| title | string | yes | – |
| what | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_task ~142
Create a Task under a story — a concrete unit of implementation work with a testable outcome. The parent story must already exist. After breaking a story into tasks, present the task list to the user before starting work — don't create tasks and immediately begin implementing. For small bug fixes (1–2 tasks), prefer adding a task under the standing bug-fix story rather than creating a new story. Suggest a dedicated story only when the fix spans 3+ tasks.
| Name | Type | Req | Description |
|---|---|---|---|
| story_id | string | yes | – |
| testable_outcome | string | yes | – |
| title | string | yes | – |
| what_to_do | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_ticket ~70
Delete a ticket. Non-todo tickets are deleted with a warning. Children are reported but not deleted — call delete_ticket on each to cascade. After all deletions, call sweep_blocked_by to clean up dangling references. Recoverable from git history.
| Name | Type | Req | Description |
|---|---|---|---|
| ticket_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
export_graph ~85
Generate a self-contained HTML file visualising the project as an interactive graph. Opens in any browser with no external requests. Nodes are coloured by type and status; edges show both hierarchy (epic -> story -> task) and dependencies (blocked_by). Click a node to see its details. On-demand — call when you want a snapshot.
| Name | Type | Req | Description |
|---|---|---|---|
| output_path | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_ticket ~56
Read one ticket by ID, with its full body. Also reports which tickets it blocks — that direction is not stored on the ticket itself, so this is the only way to see it.
| Name | Type | Req | Description |
|---|---|---|---|
| ticket_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
init_project ~95
Initialise this project for primer-mcp: creates the primer/ ticket store and adds the workflow section to CLAUDE.md (and AGENTS.md if it exists). Non-destructive and idempotent. Call this once per project, before any other tool. Optionally pass jira_project_key if tickets may later be exported to Jira.
| Name | Type | Req | Description |
|---|---|---|---|
| jira_project_key | – | – | – |
| project_name | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_actionable ~204
List what can be acted on right now, with epic context. Returns the epic's goals, story coverage, and a table of actionable items. Always show the full table to the user first, then add your recommendation below it. The table is the primary output — the user needs to see all options to make their own call. After showing the table, recommend what to do next: 1. Check whether the stories cover the epic's goals. If goals are uncovered, recommend more planning (create_story) before execution. 2. Urgent items (unverified or in-progress tasks) should usually be finished before starting new work. 3. For the remaining items, read the tickets that look relevant (get_ticket) and recommend based on impact — what unblocks the most work, what aligns with current momentum, why now. 4. If several items are genuinely equal, say so and explain why.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
list_tickets ~77
List tickets one per line, newest work last. Filter by type (epic, adr, story, task, spike), status, or parent_id (show only children of that ticket). Use this to find an ID before calling another tool.
| Name | Type | Req | Description |
|---|---|---|---|
| parent_id | – | – | – |
| status | – | – | – |
| ticket_type | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
plan_epic ~109
Create an Epic — the top-level container for a body of work. Start here: state why the work matters, its goals, and how you'll know it's done. Consider recording decisions (record_adr) before creating stories — it captures reasoning that gets lost once implementation starts.
| Name | Type | Req | Description |
|---|---|---|---|
| constraints | – | – | – |
| goals | array | yes | – |
| non_goals | – | – | – |
| success_criteria | – | – | – |
| title | string | yes | – |
| why | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
record_adr ~102
Record an Architecture Decision Record under an epic: the context forcing a choice, the decision, alternatives rejected (with reasons), and consequences accepted. Recording decisions before creating stories is recommended — it captures reasoning that gets lost once implementation starts.
| Name | Type | Req | Description |
|---|---|---|---|
| alternatives | array | yes | – |
| consequences | string | yes | – |
| context | string | yes | – |
| decision | string | yes | – |
| epic_id | string | yes | – |
| title | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
start_task ~58
Transition a task to in-progress — call this when you begin working on a task. Works from any status; you'll get a note if the transition is unusual. After finishing, call complete_task.
| Name | Type | Req | Description |
|---|---|---|---|
| task_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sweep_blocked_by ~38
Remove blocked_by references that point to tickets that no longer exist. Call once after finishing a batch of delete_ticket calls.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
update_ticket ~133
Amend a ticket after creation; anything left out is left alone. status sets todo, in-progress or blocked — for finished states, prefer complete_task, verify_task or complete_spike as they also record notes. blocked_by replaces the dependency list and is refused if a referenced ticket does not exist or the edge would create a cycle. To say "A blocks B", set blocked_by on B. body_sections replaces whole markdown sections by heading.
| Name | Type | Req | Description |
|---|---|---|---|
| blocked_by | – | – | – |
| body_sections | – | – | – |
| external_ref | – | – | – |
| status | – | – | – |
| ticket_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
verify_task ~92
Verify a task with evidence that the work holds (e.g. "218 passed, mypy clean"). Pass the short commit hash in the commit parameter so it is labelled consistently. Ideally call complete_task first to capture notes, but this works from any status. Sets the task to verified.
| Name | Type | Req | Description |
|---|---|---|---|
| commit | string | – | – |
| evidence | string | yes | – |
| task_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.