mcpField
C
cellar

cellar

github.com/virtuslabDevelopment102206 installsUpdated 1w ago
Repository

About cellar

cellar is a command-line skill for JVM projects that helps developers inspect APIs in project dependencies or Maven artifacts without manually searching JAR files. It detects Mill, sbt, and scala-cli projects, and can also query external artifacts by explicit coordinates.

Key features

  1. 01Looks up signatures, members, and documentation
  2. 02Lists or searches package and class symbols
  3. 03Detects Mill, sbt, and scala-cli projects
  4. 04Queries external artifacts by Maven coordinates
  5. 05Fetches source code and dependency trees

Use cases

  1. 01Check a dependency API before writing code
  2. 02Find symbols available in a package or class
  3. 03Query Maven artifacts without importing a project
  4. 04Inspect dependency source or a dependency tree

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/virtuslab/cellar --skill cellar

After installing, type/cellarin Claude Code to confirm it loaded.

Details

From the project README

Cellar

Use cellar to look up the API of JVM dependencies instead of guessing or manually downloading, unpacking, and searching JAR files for type signatures.

Prerequisites

Run cellar --version to verify cellar is on PATH. If not found, the user needs to install it: https://github.com/VirtusLab/cellar#installation

Project-aware commands (run from project root)

Query the current project's code and all its dependencies. Cellar auto-detects the build tool (Mill, sbt, scala-cli).

cellar get [--module <name>] <fqn>       # single symbol (signature, members, docs)
cellar list [--module <name>] <package>  # list symbols in a package or class
cellar search [--module <name>] <query>  # case-insensitive substring search
  • Mill/sbt projects: --module is required (e.g. --module lib, --module core)
  • scala-cli projects: omit --module
  • --test: query the test-scope classpath (sbt/scala-cli; for Mill, use the test module directly, e.g. --module foo.test)
  • --no-cache: skip classpath cache, re-extract from build tool
  • --java-home <path>: override JRE classpath
  • -l, --limit <N>: max results for list/search (default: 50)
  • --hide-inherited: show only members declared on the type itself (get commands)
  • --group-inherited: group members by declaring type with section headers (get commands)
  • -v, --verbose / --debug: diagnostics to stderr. Use when a symbol you expect is reported as not found: --verbose on the get commands lists which lookup strategies were tried, and --debug adds the resolved classpath and build-tool detection on any command.

External commands (query arbitrary Maven coordinates)

Query any published artifact by explicit coordinate (group:artifact:version):

cellar get-external <coordinate> <fqn>       # single symbol
cellar list-external <coordinate> <package>  # list symbols
cellar search-external <coordinate> <query>  # search by name
cellar get-source <coordinate> <fqn>         # fetch source code
cellar deps <coordinate>                     # dependency tree
  • Coordinates must be explicit: group:artifact_3:version (no :: shorthand)
  • For sbt plugins, use the full Scala and sbt suffix: group:artifact_2.12_1.0:version (e.g. org.scala-native:sbt-scala-native_2.12_1.0:latest)
  • For compiler plugins and other artifacts with full Scala version suffixes, use the full version: group:artifact_3.3.8:version
  • Use latest as the version to resolve the most recent release
  • -r, --repository <url>: extra Maven repository (repeatable), appended to the repositories configured under maven.repositories in ~/.cellar/cellar.conf or .cellar/cellar.conf

Workflow

  1. Don't know the package? → cellar search / cellar search-external
  2. Know the package, not the type? → cellar list / cellar list-external
  3. Know the type? → cellar get / cellar get-external
  4. Need the implementation? → cellar get-source

Examples

# Look up a Scala 3 trait
cellar get-external org.typelevel:cats-core_3:2.10.0 cats.Monad

# Look up a Java class
cellar get-external org.apache.commons:commons-lang3:3.14.0 org.apache.commons.lang3.StringUtils

# List a package
cellar list-external io.circe:circe-core_3:0.14.6 io.circe

# Search for a method
cellar search-external org.typelevel:cats-core_3:2.10.0 flatMap

# Get source code
cellar get-source org.typelevel:cats-core_3:2.10.0 cats.Monad

# Dependency tree
cellar deps org.typelevel:cats-effect_3:3.5.4

# sbt plugin (use full Scala + sbt suffix)
cellar deps org.scala-native:sbt-scala-native_2.12_1.0:latest

# Project-aware (from a Mill project root)
cellar get --module lib cats.Monad
cellar list --module core cats
cellar search --module lib flatMap

Example output

cellar get-external --hide-inherited org.typelevel:cats-core_3:2.10.0 cats.Monad

## cats.Monad
```scala
trait Monad[F[_]] extends FlatMap[F] with Applicative[F]
```
**Supertypes:** cats.Applicative, cats.InvariantMonoidal, cats.FlatMap, cats.FlatMapArityFunctions, cats.Apply, cats.ApplyArityFunctions, cats.InvariantSemigroupal, cats.Semigroupal, cats.Functor, cats.Invariant, java.io.Serializable

Monad.
Allows composition of dependent effectful functions.
See: [[http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf Monads for functional programming]]
Must obey the laws defined in cats.laws.MonadLaws.

**Origin:** cats.Monad
**Members:**
```scala
def iterateWhile[A](f: F[A])(p: A => Boolean): F[A]
def untilM[G[_], A](f: F[A])(cond: => F[Boolean])(implicit G: Alternative[G]): F[G[A]]
def ifElseM[A](branches: (F[Boolean], F[A])*)(els: F[A]): F[A]
def iterateUntilM[A](init: A)(f: A => F[A])(p: A => Boolean): F[A]
def map[A, B](fa: F[A])(f: A => B): F[B]
def whileM_[A](p: F[Boolean])(body: => F[A]): F[Unit]
def whileM[G[_], A](p: F[Boolean])(body: => F[A])(implicit G: Alternative[G]): F[G[A]]
def untilM_[A](f: F[A])(cond: => F[Boolean]): F[Unit]
def iterateUntil[A](f: F[A])(p: A => Boolean): F[A]
def iterateWhileM[A](init: A)(f: A => F[A])(p: A => Boolean): F[A]
```
**Companion members:**
```scala
trait Ops[F[_], A] extends Serializable
object ops
def apply[F[_]](implicit instance: Monad[F]): Monad[F]
trait ToMonadOps extends Serializable
object nonInheritedOps extends ToMonadOps
trait AllOps[F[_], A] extends Ops[F, A] with FlatMap.AllOps[F, A] with Applicative.AllOps[F, A]
```

**Supertypes:** lists every ancestor in linearization order, the order member lookup follows.

Choosing member output
  • Default: every member callable on the type, inherited ones included. Use it to find what you can call.
  • --hide-inherited: only what the type itself declares. Use it for what a subtype adds, or when the full output is too large.
  • --group-inherited: members under // Declared on / // Inherited from headers. Use it when you need the declaring parent, e.g. to read its docs or find what to override.

When Metals MCP is also available

Prefer cellar only for external dependency API lookups (cellar get-external vs Metals inspect/get-docs): cellar requires no project import and works with any published Maven coordinate. For all other tasks — goto definition, find references, rename, diagnostics, compilation — use Metals.

Output

  • stdout: Markdown — ready to consume directly
  • stderr: diagnostics (warnings, truncation notices)
  • Exit 0: success, Exit 1: error

Comments

Markdown supported