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

forkable-mcp

v0.7.0

Published

Unofficial MCP server for Forkable — order and manage corporate lunches from any MCP client.

Readme

forkable-mcp

npm CI License: MIT MCP Runtime: Bun or Node

Order and manage your Forkable lunches from Claude, Codex, Cursor, or another MCP client. You can see your week, browse menus, get recommendations, change meals, and check where lunch is without opening the Forkable app.

[!WARNING] This is an unofficial project and is not affiliated with Forkable. It uses your Forkable web session and an undocumented API that may change.

Features

  • See upcoming deliveries and the meals already selected
  • Track courier ETAs, arrival times, and office access notes
  • Browse and search menus
  • Get Forkable's meal recommendations
  • Add, replace, remove, and confirm meals
  • Rate meals from 1–5 and leave written feedback
  • Use it from any MCP client that can launch a stdio server

Quick start

You need Bun or Node.

First, log in to Forkable in Chrome and import that session:

bunx --bun forkable-mcp@latest --auth --chrome # Node: npx forkable-mcp@latest --auth --chrome

Then add it to your MCP client:

| Client | Command or configuration | | ------------------------ | ----------------------------------------------------------- | | Claude Code | claude mcp add forkable -- bunx --bun forkable-mcp@latest | | Codex | codex mcp add forkable -- bunx --bun forkable-mcp@latest | | Claude Desktop or Cursor | Add the JSON below under mcpServers | | VS Code | Add the JSON below under servers in .vscode/mcp.json |

{
  "mcpServers": {
    "forkable": {
      "command": "bunx",
      "args": ["--bun", "forkable-mcp@latest"]
    }
  }
}

Restart or reconnect your client, then ask something like:

What's for lunch this week?

Skills

Three agent skills ship with the server:

  • forkable contains the shared instructions for meals, deliveries, and tool use
  • forkable-friday adds a week-ahead planning routine on top of forkable
  • forkable-setup covers installation and authentication

Install them with:

npx skills add colinds/forkable-mcp
npx skills add colinds/forkable-mcp --list # See what's included first

The source files are in skills/.

Tools

| Tool | What it does | | --------------------- | ------------------------------------------------------------------ | | list_deliveries | Shows upcoming deliveries and selected meals | | get_delivery_status | Shows courier status, ETA, arrival time, tracking, and access notes | | get_menus | Lists menus and item options for a delivery | | search_items | Searches a delivery's menus | | recommend_meals | Returns Forkable's meal recommendations | | get_profile | Shows the signed-in Forkable user | | set_meal | Adds or replaces a meal | | set_meal_all | Sets the same meal on several deliveries | | remove_meal | Removes a meal | | rate_meal | Rates a meal or edits its score and text feedback | | confirm_delivery | Confirms or unconfirms a delivery |

Forkable still decides whether a change is allowed, including deadlines, restaurant capacity, and billing rules.

To skip a delivery, use list_deliveries and remove each selected owned meal with remove_meal. This removes those meals; it does not change your auto-order settings. Compare selected meals with recommend_meals when choosing alternatives.

Meal ratings

List the delivery first, supplying from and to for past meals. Each owned meal includes rating: null means Forkable has not made a rating available, while a rating with level: null is unrated.

Use rate_meal with the delivery ID, the meal's pieceId, and a level from 1–5. It previews first; call again with the same arguments and its confirmToken to submit. The search starts 14 days ago by default; pass both from and to to limit the lookup to an older day or week.

Optional reasons, comment, forGuest, and allowRatingFollowUps edit the feedback. Omitted fields keep their current values; an empty comment or reason array clears it. Levels 4–5 accept compliment codes, while 1–3 accept issue codes listed in the tool schema. Known incompatible stored reasons are removed, unknown server codes are preserved, and duplicates are ignored. Score changes show both the old and new score in the preview. Marking a meal as a guest meal excludes its rating from future suggestions. Follow-up preferences apply to this rating without changing your account settings. If Forkable has not reported a follow-up preference, omitting it lets Forkable apply its default, which may allow its team to contact you about your feedback. Set allowRatingFollowUps: false to opt out for the rating. Existing attachments are kept; photo editing and buffet ratings are not supported.

Authentication

There is no API key. The server reuses a Forkable web session and stores it in ~/.forkable-mcp/session.json.

Import from a browser

Log in at forkable.com, then run:

bunx --bun forkable-mcp@latest --auth --chrome # Node: npx forkable-mcp@latest --auth --chrome

Chrome and Edge profiles are found automatically on macOS, Linux, and Windows. Browser import is best-effort because browser storage and operating-system security rules vary.

On macOS, Keychain may ask for permission once per browser profile. Limit the scan if you know which profile you use:

bunx --bun forkable-mcp@latest --auth --chrome --profile "Profile 1"

Arc is supported on macOS:

bunx --bun forkable-mcp@latest --auth --chrome --browser arc

Brave and Chromium are also supported. On Linux or Windows, you may need to pass a profile directory or cookie database with --profile.

Email and password

bunx --bun forkable-mcp@latest --auth --login --email [email protected] # Node: npx forkable-mcp@latest --auth --login --email [email protected]

The command asks for your password without showing it. Password-based sessions can sign in again after they expire. SSO-only accounts need a browser or cookie import instead.

For non-interactive use, send the password on standard input with --password-stdin, or set FORKABLE_EMAIL and FORKABLE_PASSWORD.

Copy as cURL

If browser import cannot find your session, copy an authenticated Forkable GraphQL request from your browser's developer tools:

  1. Open Forkable, then open Developer Tools and select Network.
  2. Reload the page and filter for graphql.
  3. Right-click a request to /api/v2/graphql and choose Copy as cURL.
  4. Pipe the copied command into the auth command:
pbpaste | bunx --bun forkable-mcp@latest --auth # Node: pbpaste | npx forkable-mcp@latest --auth

Only the Cookie header is imported. You can also save the copied command and pass it with --file ./forkable.curl, or set FORKABLE_COOKIE to the full Cookie header.

Cookie-based sessions cannot refresh themselves. Import the cookie again when it expires.

Configuration

All settings are optional. Bun reads .env automatically; with Node, set them in the MCP server's environment.

| Variable | What it does | | -------------------- | -------------------------------------------------------------- | | FORKABLE_EMAIL | Email for non-interactive login and session refresh | | FORKABLE_PASSWORD | Password used with FORKABLE_EMAIL | | FORKABLE_MFA | MFA code for password login | | FORKABLE_COOKIE | Full Forkable Cookie header for headless or SSO authentication | | FORKABLE_CSRF | Sets the initial CSRF token; normally unnecessary | | FORKABLE_MAX_TOTAL | Local per-meal spending limit in dollars | | FORKABLE_MCP_HOME | Changes where the session is stored |

FORKABLE_MAX_TOTAL is a local limit, not a Forkable allowance or billing rule. Billing information is shown as Forkable reports it.

From source

bun install
bun run auth --chrome
bun run start

Development

bun test
bun run test:tz
bun run check
bun run smoke

License

MIT © Colin D'Souza