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

@iyulab/u-board-mcp

v0.26.0

Published

MCP server that lets an AI assistant read and draw U-Board boards through a workspace API token

Readme

@iyulab/u-board-mcp

An MCP server that lets an AI assistant read and draw the boards of a U-Board workspace — its own words to the assistant are in the tools it offers, starting with describe({ topic: "rules" }).

It talks to a U-Board server with a workspace API token: in the console, open the workspace settings, and under API 토큰 make a token (write to draw, read to look). The token acts as you, in that workspace only, and never handles a data source's credentials — you enter those in the console.

Run it

UBOARD_URL=https://board.example.com UBOARD_TOKEN=ubt_… npx -y @iyulab/u-board-mcp

With Claude Code:

claude mcp add u-board --env UBOARD_URL=https://board.example.com --env UBOARD_TOKEN=ubt_… -- npx -y @iyulab/u-board-mcp

In a client's JSON configuration:

{
  "mcpServers": {
    "u-board": {
      "command": "npx",
      "args": ["-y", "@iyulab/u-board-mcp"],
      "env": { "UBOARD_URL": "https://board.example.com", "UBOARD_TOKEN": "ubt_…" }
    }
  }
}

Tools

| Tool | What it does | |---|---| | describe | What a board can hold and how to write one: rules (read first — how the tools change a board, then the board language), kind:<name> (a kind of part in full — its options with their types and defaults; several by commas, kind:stat,chart.bar, up to 8 in one read), schema (with a JSON Pointer for one part). | | list_boards | The workspace's boards. | | get_board | A board, or one part of it by JSON Pointer (/parts/pump), with its revision. | | create_board | A new board of a kind (grid or canvas), empty or with a first board. | | patch_board | Changes part of a board with a JSON Patch (RFC 6902) on a revision; answers the new revision and advice. | | rename_board | Renames a board; its id, share links and history stay. | | delete_board | Deletes a board for good (marked destructive, so a client can ask first). A data source is removed in the console. | | validate | Checks a board, a board with a patch, or — with neither — the board as it is saved, without saving. | | look | A picture of a saved board as its viewers see it, with what went wrong while drawing; focus one part (/parts/<id>), or appearance the other paper. Needs Chrome or Edge on this computer, or UBOARD_BROWSER. | | list_sources | The workspace's data sources — never a credential; a static one with the paths it answers and whether its answers are example data. | | sample_source | What a source's response looks like: each value's JSON Pointer, type and example, and the fields that tell a list's items apart. | | create_source | A data source that needs no credential — an API, or one that answers what is stored in it by path (example values when no source has them yet); one that needs a credential is made by a person in the console. |

Reads take a JSON Pointer so only the part needed travels, and a change is a patch answered with the new revision — the document is never sent back. Every answer is compact JSON.

A board as files (optional)

Start with --bundle (or UBOARD_BUNDLE=1) and two more tools read and write the same board as files — for an assistant that edits an element's markup, style and script more than it moves parts. The board is still one stored document; the files are a way to read and write it.

| Tool | What it does | |---|---| | get_bundle | The board as files: board.json (parts, layout, states, skin — where an element's code or the background picture moved out it holds { "$file": path }), elements/<name>.html, .css, .js (a name that is not word characters and dashes is percent-encoded) and background.svg. Without files: the list with sizes and board.json; with files: the text of those. | | put_bundle | Saves the board from files, checked as any change is: files replace the files of the same path, edits ({ file, old, new }) change a file in place — old stands exactly once in it — so a long style is not sent again for a small change; the rest stays. An issue names the file it is in. |

License

AGPL-3.0-or-later, with a commercial license available — see the repository.