npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@abe-ing/mcp

v0.5.0

Published

Model Context Protocol server for driving ABE project boards and tasks from Claude Code and other MCP clients.

Readme

@abe-ing/mcp — ABE Model Context Protocol server

A stdio MCP server that gives Claude Code (and any MCP-capable agent) typed tools to drive ABE project boards and tasks — so you can run engineering issues inside ABE instead of GitHub, straight from your editor:

"list my ABE boards" · "create a board called Sprint 12 with columns todo, doing, done" · "add a P0 bug to Sprint 12 assigned to [email protected]" · "move task 91 to review"

It wraps the ABE REST API and authenticates with a Personal Access Token.

Setup in Claude Code

  1. Generate a Personal Access Token in the ABE web app: Settings → Developer → Generate a token (scope full, or tasks + boards). Copy it — it's shown once.
  2. Add the server.

CLI:

claude mcp add --transport stdio \
  --env ABE_TOKEN=abe_pat_xxxx \
  --env ABE_API_URL=https://api.abe.ing \
  abe -- npx -y @abe-ing/mcp

Or .mcp.json (commit to a project; keep the secret out of git via shell expansion):

{
  "mcpServers": {
    "abe": {
      "command": "npx",
      "args": ["-y", "@abe-ing/mcp"],
      "env": {
        "ABE_API_URL": "https://api.abe.ing",
        "ABE_TOKEN": "${ABE_TOKEN}"
      }
    }
  }
}

Environment

| Var | Required | Default | Notes | |-----|----------|---------|-------| | ABE_TOKEN | yes | — | Personal Access Token (abe_pat_…). The server exits if unset. | | ABE_API_URL | no | http://localhost:3000 | ABE API base URL. Use https://api.abe.ing for production. |

There is no tenant setting — a PAT is bound to its workspace at generation time, so the target workspace is whichever you minted the token for.

Tools

| Tool | Purpose | |------|---------| | list_boards | List project boards (id, slug, name, columns). Call first before creating tasks. | | create_board | Create a project board: name, optional columns[], description. | | update_board_columns | Replace a project board's columns: board (slug/name/id), columns[]. | | list_tasks | List tasks. Filters: board, status, type, label, all, include_done, limit. Default = your open tasks. | | get_task | Fetch one task by id, including its body: body_markdown (the linked worksheet doc rendered as markdown — source of truth) and description (create-time text; can be stale). | | get_worksheet | Fetch a worksheet (doc) by id with bodyMarkdown rendered server-side. Use with a task's worksheet_id, or for any other doc. Returns id, title, body, bodyMarkdown, visibility, lastEditedAt, createdByName (never the share token or owner email). | | update_worksheet | Replace a doc's body from markdown (body_markdown, converted server-side, previous body versioned) and/or set title. Whole-doc replace — get_worksheet first if you mean to edit. Last write wins against an open editor. | | create_task | Create a task: board, title, + description, type, priority, size, labels[], assignee_email, due_date, start_date, end_date, estimate, column. | | update_task | Update any property by id (incl. status, move via board). Nullable fields accept null to clear. body_markdown (or description — same meaning as on create) replaces the task doc; the previous body is kept as a version. | | move_task | Move a task to a column. | | complete_task | Mark a task complete. | | assign_task | Assign by assignee_email (resolved server-side). | | add_task_comment | Add a PR-style comment/status note to a task (id, body). Recorded as authored by the agent (origin: "agent"). | | list_task_comments | List a task's comments (id), chronological. | | update_task_comment | Edit a comment (id, comment_id, body) — own comments only (server-enforced). | | delete_task_comment | Delete a comment (id, comment_id) — own comments only. | | get_task_history | Fetch a task's full timeline (id): field/status events + comments + worksheet edits, merged chronologically. | | delete_task | PERMANENTLY delete a task (id). Irreversible — only when the user explicitly asks; otherwise prefer complete_task. | | list_members | List workspace members (admin/full token). Optional — assigning by email works without it. |

Enumerations are enforced by the tool schemas: priority (P0/P1/P2/urgent/high/normal), task_type (task/feature/bug/suggestion/improvement/ops), size (XS/S/M/L/XL), status (open/completed), dates as YYYY-MM-DD. column is free-form (per-board) and validated by the server.

Assignees are resolved by email or name on the server — the model never needs internal user ids. Boards are referenced by slug, name, or id (resolved automatically).

Error handling

Tools never throw at the protocol level. On failure they return a model-recoverable isError result with guidance — e.g. an invalid column tells the model to call list_boards for the valid set; a 401 tells it the token is invalid/revoked; a 402 explains the workspace billing is locked (blocking reads and writes).

Develop

npm install
npm run build      # tsc → dist/
npm test           # vitest
npm run typecheck

Pinned to @modelcontextprotocol/[email protected] (exact). A future SDK major renames the package and moves to zod v4 — do not cross that boundary without rewriting the imports and re-checking registerTool.