# Juscribe (npm · @juscribe/mcp)

Read and work your Juscribe board: tickets, subtasks, blockers, projects and iterations.

- Trust score: 67/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-26

## Components

- npm · `@juscribe/mcp`: 67/100 (this document), [markdown](https://verifymcp.io/servers/juscribe-juscribe/juscribe-mcp.md), [page](https://verifymcp.io/servers/juscribe-juscribe/juscribe-mcp)

## Channel facts

- Registry: `npm`
- Package: `@juscribe/mcp`
- Version: `0.2.0`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-26.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 0 of 3 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 19/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 74/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2986 tokens (~135/item across 22 items; 22 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 10/100
  - Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 22 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the Juscribe MCP server?

Juscribe runs locally as an npm package, launched with npx -y @juscribe/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add juscribe-juscribe -- npx -y @juscribe/mcp
```

### Cursor

```json
{
  "mcpServers": {
    "juscribe-juscribe": {
      "command": "npx",
      "args": [
        "-y",
        "@juscribe/mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "juscribe-juscribe": {
      "command": "npx",
      "args": [
        "-y",
        "@juscribe/mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add juscribe-juscribe -- npx -y @juscribe/mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "juscribe-juscribe": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@juscribe/mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add juscribe-juscribe --command npx --arg -y --arg @juscribe/mcp
```

### Hermes

```yaml
mcp_servers:
  juscribe-juscribe:
    command: "npx"
    args: ["-y", "@juscribe/mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "juscribe-juscribe": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@juscribe/mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add juscribe-juscribe -t stdio -c npx -a -y @juscribe/mcp
```

### Other

```json
{
  "mcpServers": {
    "juscribe-juscribe": {
      "command": "npx",
      "args": [
        "-y",
        "@juscribe/mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-26 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-25 (score 66, +1)

- [functional improvement] Stability: unverified → 0.07
- [functional] Package version: 0.1.0 → 0.2.0
- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-24 (score 65, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-09-23 (score 50)

First indexed and scored.

## MCP tools (22)

### `get_workspace_summary` (~112 tokens)

Workspace summary

Get a condensed overview of the workspace board: panel counts, projects, velocity, users, and ticket summaries for the current and backlog panels unless others are named. Use this to orient yourself before drilling into specific tickets.

Input parameters:

- `panels` (string): Comma-separated panel names to include ticket details for (default "current,backlog"). Panels not listed return only count/points.
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `list_tickets` (~265 tokens)

List tickets

List tickets in a workspace with optional filters, 50 to a page. The reply says when more pages exist, and when release, milestone and deadline markers were left out.

Input parameters:

- `assignee_id` (number): Filter by assignee user ID
- `fields` (string): Comma-separated field names (default id,title,ticket_type,state,points,project_id,assignees,labels)
- `include_markers` (boolean): Include release, milestone and deadline markers, which are left out by default
- `page` (integer): Page number, from 1
- `panel` (string): Filter by panel
- `per_page` (integer): Tickets per page, 1 to 200 (default 50)
- `project_id` (string): Project external ID, to list a project's tickets. Add panel to see only what is left.
- `q` (string): Search query (title/description)
- `state` (string): Filter by state (e.g. started, delivered)
- `ticket_type` (string): Filter by type (feature, bug, chore, research, milestone, release, deadline)
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `get_ticket` (~108 tokens)

Get a ticket

Get full details for a single ticket, including comments and attachments.

Input parameters:

- `comments_limit` (integer): Only the newest N comments, oldest first (default: all)
- `include_attachments` (boolean): Include attachments (default: true)
- `include_comments` (boolean): Include comments (default: true)
- `ticket_id` (string, required): Ticket external ID
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `create_ticket` (~241 tokens)

Create a ticket

Create a new ticket in the workspace. Returns the created ticket, with notes when it matches another ticket.

Input parameters:

- `assignee_ids` (array): User IDs to assign, from list_people
- `description` (string): Ticket description (markdown)
- `insert_at` (string): Where in the panel: top, bottom, before:<ticket id> or after:<ticket id>
- `labels` (array): Label names, as list_labels shows them
- `panel` (string): Which panel the ticket goes in. With neither panel nor insert_at it lands at the bottom of the Icebox; place a ticket only when the person asks.
- `points` (number): Story points estimate (0, 1, 2, 3, 5, or 8)
- `project_id` (string): Project external ID to assign to
- `stakeholder_id` (number): Stakeholder user ID
- `ticket_type` (string): Ticket type (default: feature)
- `title` (string, required): Ticket title
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `update_ticket` (~233 tokens)

Update a ticket

Update an existing ticket's fields. Only provided fields are changed.

Input parameters:

- `assignee_ids` (array): User IDs to assign, from list_people, replacing the current set
- `description` (string): New description
- `due_date` (string|null): Due date in YYYY-MM-DD format (null to unset). Only a milestone, release or deadline ticket takes one; any other type refuses it.
- `labels` (array): Label names, as list_labels shows them, replacing the current set
- `points` (number): New points estimate
- `project_id` (string|null): New project external ID (null to unset)
- `stakeholder_id` (number|null): New stakeholder user ID (null to unset)
- `state` (string): Move the ticket back to the Icebox (unprioritized) or the Backlog (prioritized). Moving forward is transition_ticket.
- `ticket_id` (string, required): Ticket external ID
- `title` (string): New title
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `transition_ticket` (~191 tokens)

Change a ticket's state

Move a ticket forward one step: unprioritized → prioritized → started → finished → delivered. Finished is the last step you take on your own; deliver only when the person asks. Cancelled is reachable from any open state and needs a resolution. To move a ticket back to the Icebox or the Backlog, use update_ticket with state. Accepting or rejecting is a person's decision, made in the app, so this tool offers neither (#4917).

Input parameters:

- `comment` (string): Comment to attach (e.g. rejection reason)
- `force` (boolean): Force non-standard transition (override)
- `resolution` (string): Resolution (required when transitioning to cancelled)
- `state` (string, required): Target state
- `ticket_id` (string, required): Ticket external ID
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `add_comment` (~72 tokens)

Comment on a ticket

Add a comment to a ticket. Supports @mentions.

Input parameters:

- `body` (string, required): Comment body (supports @mentions and markdown)
- `ticket_id` (string, required): Ticket external ID
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `move_ticket` (~112 tokens)

Move a ticket

Put a ticket directly above (before) or below (after) another ticket in the same panel. This is how the backlog is prioritised. Moving between panels is update_ticket or transition_ticket.

Input parameters:

- `after` (string): Put it directly below this ticket
- `before` (string): Put it directly above this ticket
- `ticket_id` (string, required): The ticket to move
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `get_current_iteration` (~92 tokens)

Get the current iteration

The iteration in progress: its number, dates, committed and accepted points, and its tickets, 50 to a page. Use this rather than list_iterations, which returns every iteration the board has had.

Input parameters:

- `page` (integer): Page of its tickets, from 1
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `list_subtasks` (~77 tokens)

List a ticket's subtasks

List a ticket's subtasks: its ordered steps, each with at most one owner. The ids here are what the other subtask tools take.

Input parameters:

- `ticket_id` (string, required): Ticket external ID
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `add_subtask` (~108 tokens)

Add a subtask

Add a step to the end of a ticket. Place it elsewhere with move_subtask.

Input parameters:

- `assignee_id` (integer): The one person who does it, from list_people
- `description` (string): Detail for the step (markdown)
- `ticket_id` (string, required): Ticket external ID
- `title` (string, required): What the step is
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `update_subtask` (~151 tokens)

Update a subtask

Change a subtask. completed: true ticks it and completed: false reopens it; calling either twice changes nothing. Only the fields passed change.

Input parameters:

- `assignee_id` (integer): The one person who does it, from list_people
- `completed` (boolean): true when the step is done, false to reopen it
- `description` (string): New detail (markdown)
- `subtask_id` (integer, required): Subtask ID, from list_subtasks
- `ticket_id` (string, required): Ticket external ID
- `title` (string): New title
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `move_subtask` (~109 tokens)

Move a subtask

Move a subtask to a place in its ticket's list, counting from 1. A place past the end moves it to the bottom.

Input parameters:

- `place` (integer, required): Where it goes: 1 is the top
- `subtask_id` (integer, required): Subtask ID, from list_subtasks
- `ticket_id` (string, required): Ticket external ID
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `list_blockers` (~122 tokens)

List a ticket's blockers

List what blocks a ticket, or with direction "blocks", what it blocks. Resolved blockers are included with resolved_at set. The ids here are what resolve_blocker takes.

Input parameters:

- `direction` (string): blocked_by (default): what this ticket waits on. blocks: what waits on it.
- `page` (integer): Page number, 50 to a page
- `ticket_id` (string, required): Ticket external ID
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `add_blocker` (~203 tokens)

Add a blocker

Record that a ticket waits on another ticket, a project, or an outside event (External). Add one blocker per condition that clears on its own.

Input parameters:

- `blocker_id` (string): The ticket or project it waits on. Required for Ticket and Project.
- `blocker_type` (string, required): What it waits on
- `description` (string): More detail on what is awaited
- `due_kind` (string): What the date means: wait_until (do not start before), review_on (look again then), expected_by (should clear by then). Needs due_on.
- `due_on` (string): A date, YYYY-MM-DD. Needs due_kind.
- `ticket_id` (string, required): The ticket that waits
- `title` (string): A short label the board shows. An External blocker needs this or a description.
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `resolve_blocker` (~75 tokens)

Resolve a blocker

Mark a blocker resolved, which unblocks the ticket once none is left. Get its id from list_blockers.

Input parameters:

- `dependency_id` (integer, required): Blocker ID, from list_blockers
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `list_projects` (~47 tokens)

List projects

List all projects in a workspace with their state and position.

Input parameters:

- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `list_iterations` (~51 tokens)

List iterations

List iterations (sprints) for a workspace, with velocity and point data.

Input parameters:

- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `list_workspaces` (~31 tokens)

List workspaces

List the workspaces this token can reach, with their ids. A workspace-scoped token reaches exactly one.

### `list_people` (~68 tokens)

List people

List the people and agents on the board, with the user ids that assignee_ids and stakeholder_id take. Mention someone by @username: names are not unique.

Input parameters:

- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `list_labels` (~50 tokens)

List labels

List the labels on the board, with the ids that label_ids takes.

Input parameters:

- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

### `search` (~103 tokens)

Search the board

Search tickets, projects, comments and people at once. Matches label and project names too, and ranks an exact ticket or project number first. Results are compact: use get_ticket for detail.

Input parameters:

- `limit` (integer): Results per kind, 1 to 50 (default 10)
- `q` (string, required): What to search for
- `workspace_id` (string): Workspace ID. Defaults to this token's workspace; required when the token is not limited to one.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/juscribe-juscribe/juscribe-mcp#diagnostics

## Score history

- 2026-09-26: 67
- 2026-09-25: 66
- 2026-09-24: 65
- 2026-09-23: 50

## Common questions

### What is the Juscribe MCP server?

Juscribe is an MCP server listed in the public MCP registry as io.github.juscribe/juscribe. Read and work your Juscribe board: tickets, subtasks, blockers, projects and iterations. This page covers its npm package (@juscribe/mcp).

### Is the Juscribe MCP server safe to use?

Juscribe scores 67 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 26 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Juscribe MCP server expose?

Juscribe exposes 22 tools: get_workspace_summary, list_tickets, get_ticket, create_ticket, update_ticket, and 17 more. Their descriptions and schemas cost roughly 2,621 tokens of context every time the server is loaded.

### Is the Juscribe MCP server still maintained?

Juscribe is still listed as active in the MCP registry. We last reached this channel on 26 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Juscribe MCP server under?

Juscribe declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/@juscribe/mcp
- Socket report: https://socket.dev/npm/package/@juscribe/mcp
- Website: https://juscribe.ai/
- Changelog RSS feed: https://verifymcp.io/servers/juscribe-juscribe/juscribe-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/juscribe-juscribe/juscribe-mcp.json
- HTML version of this page: https://verifymcp.io/servers/juscribe-juscribe/juscribe-mcp
