forkable-mcp

forkable-mcp

Enables ordering and managing Forkable corporate lunches from any MCP client, including viewing menus, setting/skipping/confirming meals, and getting personalized recommendations.

Category
访问服务器

README

forkable-mcp

npm CI License: MIT MCP Runtime: Bun

Order and manage your Forkable corporate lunches from Claude, Cursor, or any MCP client. See your week, browse and search menus, get personalized picks, and set / skip / confirm meals — all from chat.

[!WARNING] Unofficial, not affiliated with Forkable. It acts on your behalf using your own Forkable session. Use your own account, at your own risk.

Features

  • 📅 See upcoming deliveries — status, cutoff, copay, and what's already picked
  • 🚚 Track a delivery — courier ETA, when it actually landed, and the office access notes
  • 🍱 Browse and search menus, and get personalized meal recommendations
  • ✏️ Set, batch-set, remove, skip, and confirm meals — every write is dry-run until you confirm it
  • 🤖 Runs over stdio (your client launches it); headless-friendly for agents

Quick start

Requires Bun 1.3+ (bunx runs it — no clone needed).

1. Authenticate (imports your logged-in browser session on macOS; see Auth for other options)

bunx forkable-mcp@latest --auth --chrome

2. Add it to your MCP client

Client Add it
Claude Code claude mcp add forkable -- bunx forkable-mcp@latest
Codex codex mcp add forkable -- bunx forkable-mcp@latest
Claude Desktop / Cursor add the JSON below to the config (under mcpServers)
VS Code add the JSON below to .vscode/mcp.json (under servers)
{
  "mcpServers": {
    "forkable": { "command": "bunx", "args": ["forkable-mcp@latest"] }
  }
}

Then ask your client things like "what's for lunch this week?" or "set Tuesday to the chicken bowl."

From source instead? git clone + bun install, authenticate with bun run auth --chrome, and point your client at bun run --cwd /path/to/forkable-mcp start.

Tools

Tool Does
📅 list_deliveries Your week: date, status, what's picked, whether it's still editable, copay
🚚 get_delivery_status Where lunch is: scheduled window, courier ETA, arrival time, tracking link, access notes
🍱 get_menus Items for a delivery (pass itemId for one item's modifiers/options)
🔎 search_items Keyword search across a delivery's menus
✨ recommend_meals / explain_pick Personalized picks, and why the current meal was chosen
👤 get_profile The authenticated user
✅ set_meal / set_meal_all Set the meal for a day (or several days at once)
➖ remove_meal / skip_delivery Remove one meal by id, or decline a whole day
🔒 confirm_delivery Confirm (or unconfirm) a delivery

Auth

There's no API key: the server reuses a real Forkable web session. Pick one of the four below. From a clone, use bun run auth … in place of bunx forkable-mcp@latest --auth ….

Email + password

bunx forkable-mcp@latest --auth --login --email you@co.com --password '…'
# or set FORKABLE_EMAIL / FORKABLE_PASSWORD (+ FORKABLE_MFA), then: bunx forkable-mcp@latest --auth --login

The only method that survives expiry: on a 401 the server logs back in and retries. SSO-only accounts can't use it and fail fast with a message saying so. The cookie methods below cover those, but you have to re-run them whenever the session expires.

Import from your browser (macOS)

Log in at forkable.com, then pull the cookie out of the browser. Decrypting it needs your login Keychain, so approve the macOS prompt when it appears.

bunx forkable-mcp@latest --auth --chrome
bunx forkable-mcp@latest --auth --chrome --browser arc    # brave, edge, vivaldi, opera, chromium,
                                                          # chrome-beta, chrome-dev, chrome-canary

Every profile is searched and the most recently used Forkable session wins; the CLI prints which one it picked. Pin a specific profile with its directory name, not its display name: --profile "Profile 1".

Copy as cURL

"Copy as cURL" is a DevTools command: right-click a request in the Network tab, pick Copy → Copy as cURL, and DevTools puts that entire request on your clipboard as a runnable curl — URL, body, and every header, cookie included. Paste the whole thing; only the cookie: header is read.

  1. forkable.com → DevTools (<kbd>⌥⌘I</kbd> / <kbd>F12</kbd>) → Network, reload the page.
  2. Filter for graphql, right-click a POST https://forkable.com/api/v2/graphql row → Copy → Copy as cURL. Use a GraphQL request, since those are authenticated calls and always carry the session. (Windows: Copy as cURL (bash). Firefox: Copy Value → Copy as cURL.)
  3. pbpaste | bunx forkable-mcp@latest --auth, or save it and use --file ./forkable.curl.

What lands on your clipboard, truncated:

curl 'https://forkable.com/api/v2/graphql' \
  -H 'accept: application/json' \
  -H 'x-csrf-token: …' \
  -H 'cookie: _easyorder_session=abc123…; _ga=GA1.2…' \
  --data-raw '{"query":"…"}'

Paste the cookie header

Same idea, one header instead of the whole blob. Useful on Linux/Windows, or when the browser import can't find your profile. Follow steps 1–2 above, but click the request instead of right-clicking it, then copy the whole cookie: value under Headers → Request Headers. It's a long name=value; name=value; … string and must contain _easyorder_session.

FORKABLE_COOKIE='_easyorder_session=…; other=…' bunx forkable-mcp@latest --auth

The session is stored at ~/.forkable-mcp/session.json (mode 0600) and is never logged.

Configuration

All settings are environment variables (.env is auto-loaded by Bun — see .env.example). Everything is optional; with none set you authenticate interactively and there's no spend cap.

Variable Default Description
FORKABLE_EMAIL — Email for headless password login. With FORKABLE_PASSWORD, also enables auto-relogin when the session expires.
FORKABLE_PASSWORD — Password for headless login (pair with FORKABLE_EMAIL).
FORKABLE_MFA — MFA code, if your account requires one for password login.
FORKABLE_COOKIE — Headless auth for SSO-only accounts: a full forkable.com Cookie header (see Auth). Provisioned on startup if no session exists.
FORKABLE_CSRF — Pin a CSRF token instead of the auto-fetched one (rarely needed).
FORKABLE_MAX_TOTAL — Hard spend cap in dollars: a write whose total exceeds it is refused (no confirm-token). Unset = no cap; the preview just notes when a meal is over your company's daily coverage.
FORKABLE_WRITE_SECRET per-install HMAC key for write confirm-tokens. Auto-generated and stored in the session file if unset; set it to pin one across machines.
FORKABLE_MCP_HOME ~/.forkable-mcp Directory for the on-disk session (mode 0600).

Development

bun test          # unit tests
bun run test:tz   # same suite under a non-UTC zone (date formatting must be host-independent)
bun run check     # lint + format + typecheck + both test runs

License

MIT © Colin D'Souza

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选