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

@shahidkhan_23232/fcp-cli

v0.1.5

Published

Operate a hosted FCP scheduling platform from a terminal or an agent

Readme

The fcp CLI

fcp drives one hosted FCP workspace from a terminal. You install it, sign in against a URL, and then either run commands yourself or point Claude at it and let Claude operate the product for you.

Every command follows the same rules, so an agent can use it without guessing:

  • --json on any command prints the raw API result.
  • A failure prints one line on stderr and exits non-zero.
  • Writes go through the same handlers the browser uses, so rules, hooks and the audit trail apply.

Install

Today the CLI runs from the repository under tsx, like the other apps:

pnpm install
node --import tsx apps/cli/src/bin.ts <command>

Give yourself a short alias:

alias fcp='node --import tsx /path/to/fcp-platform/apps/cli/src/bin.ts'

After pnpm --filter @fcp/cli-app build the same CLI runs from apps/cli/dist/bin.js, which is what the published fcp binary points at.

Sign in

fcp login https://fcp.example.com --email [email protected] --password '…'
fcp whoami
fcp logout

login signs in against the host's Better Auth endpoint and stores the session token in your config directory with owner-only permissions:

| Platform | File | | -------- | ----------------------------------------------- | | Windows | %APPDATA%\fcp\session.json | | macOS | ~/Library/Application Support/fcp/session.json | | Linux | $XDG_CONFIG_HOME/fcp/session.json |

The token is never printed and never written inside the repository.

| Variable | What it does | | -------------- | ---------------------------------------------------------------- | | FCP_PASSWORD | Supplies the password instead of --password | | FCP_URL, FCP_TOKEN | Use this host and token instead of the stored session | | FCP_ORIGIN | Origin header sent to the host; defaults to the host URL | | FCP_CONFIG_DIR | Where the session file lives |

Two-factor accounts add --otp <code>.

FCP_ORIGIN matters when the API and the web app sit on different origins, as they do in local development: the API trusts http://localhost:5173, not http://localhost:3000, so a local login needs FCP_ORIGIN=http://localhost:5173. A hosted FCP serves both from one origin and needs nothing.

Commands

| Command | What it does | | ------- | ------------ | | fcp login <url> --email … [--password …] [--otp …] | Sign in and store the session | | fcp logout | Remove the stored session | | fcp whoami | Print the host and the signed-in account | | fcp entity list <entity> [--filter …] [--sort …] [--limit n] [--offset n] | Read rows | | fcp entity get <entity> <id> | Read one row | | fcp entity create <entity> --data '<json>' \| --file <path> | Create a row | | fcp entity update <entity> --data '<json>' | Update a row | | fcp entity delete <entity> --data '{"id":…}' | Delete a row | | fcp extension init <folder> --kind … --id … --name … | Scaffold an extension | | fcp extension validate <folder> | Check the manifest and compile the sources | | fcp extension build <folder> <output> | Write the artifacts and extension.json | | fcp extension install <folder> [--approve] [--update] [--scopes a,b] | Build and install | | fcp extension approve <id> --scopes a,b | Approve pending scopes | | fcp extension enable\|disable\|uninstall <id> | Lifecycle | | fcp extension list | List installed extensions | | fcp extension dev <folder> [--approve] | Watch, rebuild and push on every save | | fcp propose --lever '<json>' [--note …] | Stage a scheduling change | | fcp accept <id> / fcp reject <id> | Decide a staged proposal | | fcp events [--entity …] [--state …] [--limit n] [--follow] | Read the entity event queue | | fcp schedule | Read the current plan | | fcp kpis | Read the current KPI set | | fcp mcp | Serve the FCP tools over stdio for an agent | | fcp skills get core | Print the skill this CLI ships |

Entities

--filter repeats and reads field:op:value, with the operators eq ne lt lte gt gte contains in isNull isNotNull. The value is read as JSON when it parses as JSON, so isActive:eq:true is a boolean. --sort repeats and reads field:asc or field:desc.

create and update take the whole row as one JSON object. The workspace revision is fetched and supplied for you; put expectedRevision inside --data when you want the write to fail on a concurrent change. Copy the field set from an existing row:

fcp entity list customers --limit 1 --json

Extensions

install reads the folder, compiles panels, views and slots, attaches hook handler sources as artifacts, and posts the bundle. Without --approve the install lands disabled with pending scopes, which a person approves in the Extensions screen or with fcp extension approve.

dev pushes an update after every save so the running app hot-swaps the module. It prints one line per push and keeps going after a failed build.

init copies from skills/fcp-extension-author/templates. It finds that folder by walking up from the CLI; set FCP_TEMPLATE_DIR when the CLI lives elsewhere.

Connecting Claude

claude mcp add fcp -- fcp mcp

fcp mcp serves twelve tools over stdio against the host you are signed in to: list_entities, get_entity, create_entity, update_entity, delete_entity, list_entity_events, create_job, edit_job, propose, decide_proposal, install_extension and set_extension_field. It is the whole product surface an agent needs: read data, change data, install an extension, stage a scheduling change for a person to accept.

Point Claude at the shipped skill first:

fcp skills get core