{"id":47636307,"url":"https://github.com/henkas/orderfood","last_synced_at":"2026-04-02T00:09:59.547Z","repository":{"id":346223442,"uuid":"1188904782","full_name":"henkas/orderfood","owner":"henkas","description":"MCP server for AI-driven food delivery — search restaurants and manage orders on Uber Eats \u0026 Thuisbezorgd via 11 MCP tools. Reverse-engineered APIs, encrypted local credentials.","archived":false,"fork":false,"pushed_at":"2026-03-23T02:07:50.000Z","size":194,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-23T14:05:27.001Z","etag":null,"topics":["ai-agent","claude","esm","food-delivery","mcp","mitmproxy","model-context-protocol","monorepo","nodejs","pnpm-workspace","reverse-engineering","thuisbezorgd","typescript","uber-eats"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@henkas/orderfood","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/henkas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-22T18:33:10.000Z","updated_at":"2026-03-23T02:07:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/henkas/orderfood","commit_stats":null,"previous_names":["henkas/orderfood"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/henkas/orderfood","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henkas%2Forderfood","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henkas%2Forderfood/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henkas%2Forderfood/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henkas%2Forderfood/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/henkas","download_url":"https://codeload.github.com/henkas/orderfood/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henkas%2Forderfood/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31293285,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agent","claude","esm","food-delivery","mcp","mitmproxy","model-context-protocol","monorepo","nodejs","pnpm-workspace","reverse-engineering","thuisbezorgd","typescript","uber-eats"],"created_at":"2026-04-02T00:09:58.856Z","updated_at":"2026-04-02T00:09:59.533Z","avatar_url":"https://github.com/henkas.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OrderFood MCP\n\n[![CI](https://github.com/henkas/orderfood/actions/workflows/ci.yml/badge.svg)](https://github.com/henkas/orderfood/actions/workflows/ci.yml)\n[![npm](https://img.shields.io/npm/v/@henkas/orderfood)](https://www.npmjs.com/package/@henkas/orderfood)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\nMCP server that lets AI agents search restaurants and place food delivery orders on **Uber Eats** and **Thuisbezorgd** via 11 MCP tools.\n\n\u003e **Legal:** Reverse engineering for interoperability is explicitly permitted under EU Directive 2009/24/EC Article 6. This project is personal use and open-source research — not commercial, not affiliated with Uber Eats or Just Eat Takeaway.\n\n---\n\n## Who this is for\n\n- **AI power users** who want to tell Claude or Codex \"find me sushi nearby and add the best-rated option to my cart\" and have it actually work\n- **Developers** exploring MCP server design for real-world consumer API integrations\n- **Researchers** studying reverse-engineered API interoperability under EU Directive 2009/24/EC Article 6\n\n## Who this is not for\n\n- Anyone looking for a fully automated \"place order without touching anything\" experience — order placement requires a browser payment step on both platforms and is not yet automatable (see Platform Support below)\n- High-volume or commercial use — this tool is designed for personal, single-account use only\n- Users who need a rock-solid session — Uber Eats cookies expire in 24–48 hours and require manual refresh; Thuisbezorgd tokens auto-refresh but the APIs can change without notice\n\n## Features\n\n| Tool | Description |\n|------|-------------|\n| `search_restaurants` | Find restaurants by location, cuisine, or query |\n| `get_restaurant` | Get full restaurant details and menu |\n| `get_cart` | View current cart |\n| `add_to_cart` | Add an item to the cart with options |\n| `clear_cart` | Empty the cart |\n| `get_saved_addresses` | List saved delivery addresses |\n| `get_payment_methods` | List available payment methods |\n| `place_order` | Place the current cart as an order |\n| `track_order` | Get live order status |\n| `get_order_history` | List past orders |\n| `cancel_order` | Cancel an active order |\n| `ping_platform` | Check auth + connectivity for a platform |\n\nAll tools accept `platform: \"ubereats\" | \"thuisbezorgd\"` as a required parameter.\n\n## Platform Support\n\n| Capability | Uber Eats | Thuisbezorgd | Notes |\n|---|---|---|---|\n| Search restaurants | ✅ | ✅ | |\n| Get restaurant + menu | ✅ | ✅ | TB uses SSR HTML scraping |\n| Cart management | ✅ | ✅ | |\n| Saved addresses | — | ✅ | UE resolves addresses on-the-fly |\n| Payment methods | ✅ | ✅ | |\n| Place order | ⚠️ | ⚠️ | Blocked by browser payment flow (Apple Pay / iDeal / Adyen) |\n| Track order | ✅ | 🚧 | TB tracking endpoint not yet captured |\n| Order history | 🚧 | 🚧 | UE: endpoint returns null — correct request params unknown; TB: not yet captured |\n| Cancel order | 🚧 | 🚧 | Endpoint not yet captured |\n| Health check | ✅ | ✅ | `ping_platform` tool verifies auth + connectivity |\n\n**Legend:** ✅ working · ⚠️ blocked by external dependency · 🚧 stub (API not yet captured) · — not applicable\n\n## Architecture\n\npnpm workspace monorepo — TypeScript 5, strict, pure ESM, Node.js 20+.\n\n```\npackages/\n  shared/               @orderfood/shared — normalized types + PlatformClient interface\n  ubereats-client/      @orderfood/ubereats-client — Uber Eats REST client\n  thuisbezorgd-client/  @orderfood/thuisbezorgd-client — Thuisbezorgd REST client\n  mcp-server/           @henkas/orderfood — MCP server + setup CLI\ntools/\n  api-capture/          mitmproxy addon for capturing API traffic\ndocs/\n  api-reference/        Documented endpoints per platform\n```\n\n## Prerequisites\n\n- Node.js 20+\n- pnpm 9+\n- Python 3.11+ *(only for API capture tooling)*\n\n## Installation\n\n```bash\ngit clone https://github.com/henkas/orderfood.git\ncd orderfood\npnpm install\npnpm build\n```\n\n## Setup\n\n```bash\nnpx @henkas/orderfood setup --platform ubereats\nnpx @henkas/orderfood setup --platform thuisbezorgd\n```\n\nCredentials are stored encrypted at `~/.orderfood/` (AES-256-GCM). See the [Setup Guide](docs/setup.md) for full step-by-step instructions including where to find the Uber Eats cookies and how the Thuisbezorgd OAuth flow works.\n\n## Usage with Claude Code\n\n```bash\nclaude mcp add orderfood -- npx @henkas/orderfood\n```\n\nOr if running from source:\n\n```bash\nclaude mcp add orderfood -- node /path/to/orderfood/packages/mcp-server/dist/index.js\n```\n\n## Usage with Codex\n\n```bash\ncodex mcp add orderfood -- npx @henkas/orderfood\n```\n\nThen talk to Claude:\n\n```\nFind Italian restaurants near Amsterdam Centraal on Thuisbezorgd\n```\n```\nAdd a Margherita pizza from [restaurant] to my Uber Eats cart\n```\n```\nWhat's in my Thuisbezorgd cart?\n```\n```\nShow my Uber Eats payment methods\n```\n\n## Development\n\n```bash\npnpm install        # install all workspace packages\npnpm typecheck      # type-check all packages\npnpm test           # run all tests\npnpm build          # compile all packages\n\n# Per-package\npnpm --filter @orderfood/shared test\npnpm --filter @henkas/orderfood build\n```\n\n## API Capture\n\nPlatform client code is based on mitmproxy captures of the real apps. To contribute new endpoint discoveries:\n\n1. `pip install mitmproxy`\n2. Follow `tools/api-capture/README.md` to install the cert on your device\n3. `mitmproxy -s tools/api-capture/capture.py`\n4. Use the app — captured calls land in `tools/api-capture/output/{platform}/`\n5. Document findings in `docs/api-reference/{platform}.md`\n\n## Documentation\n\n| | |\n|---|---|\n| [Setup Guide](docs/setup.md) | Install, authenticate, connect to your agent |\n| [Uber Eats API Reference](docs/api-reference/ubereats.md) | Discovered endpoints and request shapes |\n| [Thuisbezorgd API Reference](docs/api-reference/thuisbezorgd.md) | Discovered endpoints and request shapes |\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Security\n\nCredentials are encrypted at rest (AES-256-GCM, HKDF-SHA256 key from machine ID). See [SECURITY.md](SECURITY.md) for the vulnerability reporting process.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenkas%2Forderfood","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhenkas%2Forderfood","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenkas%2Forderfood/lists"}