产品库存查询服务

Forager是一款提供Wegmans产品库存、价格、货架位置和营养信息查询服务的MCP服务器。

  • by plaidfinch
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 plaidfinch/forager

使用说明

觅食者

MCP(模型上下文协议)服务器,为Claude提供对Wegmans产品库存、价格、过道位置和营养信息的可查询访问。

特性

  • 产品搜索:查询每家店约29000种产品,包括价格、过道位置和营养数据
  • 多店铺支持:每个商店都有自己的数据库-查询隔离可防止跨商店混淆
  • 位置发现:按城市、州或坐标查找Wegmans商店
  • 离线功能:数据在SQLite中本地缓存,用于快速离线查询
  • 自动刷新:目录数据过时时(>24小时)会自动刷新

快速开始

cd forager
./install.sh

这将安装依赖项,构建服务器并将其添加到Claude Code中。

然后重新启动Claude Code并尝试:“查找我附近的Wegmans商店”

手动安装

npm install
npm run build
claude mcp add --transport stdio forager -- node $PWD/dist/src/index.js

卸载

claude mcp remove forager

更新中

更新仓库时,重新生成以获取最新更改:

git pull
npm install      # In case dependencies changed
npm run build    # Rebuild TypeScript

MCP服务器指向构建的文件,因此更改将在下次重新启动Claude Code时生效。无需重新运行 claude mcp add.

数据位置

数据按照XDG基本目录规范存储:

~/.local/share/forager/    # or $XDG_DATA_HOME/forager/
  settings.db        # API keys, active store setting
  stores.db          # Store locations (from Wegmans API)
  stores/
    74.db            # Store 74's products, nutrition, etc.
    101.db           # Store 101's products

覆盖: XDG_DATA_HOME=/custom/path

工具

query

对商店数据库或活动商店的产品数据库执行只读SQL查询。

参数:

  • sql (必需):SQL SELECT语句
  • database (可选): "stores" 或 "products" (默认值: "products")

示例:

-- Find stores in New York (database="stores")
SELECT store_number, name, city, state
FROM stores
WHERE state = 'NY'

-- Search products by name (database="products", requires setStore first)
SELECT name, brand, price_in_store, aisle
FROM products
WHERE name LIKE '%yogurt%'
ORDER BY price_in_store

-- Find high-protein products under $5
SELECT p.name, p.price_in_store, nf.quantity as protein_g
FROM products p
JOIN nutrition_facts nf ON p.product_id = nf.product_id
WHERE nf.nutrient = 'Protein'
  AND nf.quantity > 20
  AND p.price_in_store < 5
ORDER BY nf.quantity DESC

setStore

选择一家Wegmans商店并获取其产品目录。

参数:

  • storeNumber (必填):店铺编号(例如“74”)
  • forceRefresh (可选):即使数据存在,也强制刷新目录

用途:

  1. 首先,查询店铺以查找店铺编号
  2. 呼叫 setStore 带有店铺编号
  3. 然后查询该商店的产品

数据库架构

存储数据库(database="stores")

CREATE TABLE stores (
  store_number TEXT PRIMARY KEY,
  name TEXT NOT NULL,
  city TEXT,
  state TEXT,
  zip_code TEXT,
  street_address TEXT,
  latitude REAL,
  longitude REAL,
  phone_number TEXT,
  has_pickup INTEGER,
  has_delivery INTEGER,
  has_ecommerce INTEGER,
  has_pharmacy INTEGER,
  sells_alcohol INTEGER
);

产品数据库(database="products")

CREATE TABLE products (
  product_id TEXT PRIMARY KEY,
  name TEXT NOT NULL,
  brand TEXT,
  description TEXT,
  pack_size TEXT,
  image_url TEXT,
  ingredients TEXT,
  allergens TEXT,
  is_sold_by_weight INTEGER,
  is_alcohol INTEGER,
  upc TEXT,
  category_path TEXT,          -- e.g., "Dairy > Milk > Whole Milk"
  tags_filter TEXT,            -- JSON array: ["Organic", "Gluten Free"]
  tags_popular TEXT,           -- JSON array: ["Wegmans Brand"]
  -- Store-specific fields
  price_in_store REAL,
  price_in_store_loyalty REAL, -- Shoppers Club price
  price_delivery REAL,
  price_delivery_loyalty REAL,
  unit_price TEXT,             -- e.g., "$2.99/lb"
  aisle TEXT,
  shelf TEXT,
  is_available INTEGER,
  is_sold_at_store INTEGER,
  last_updated TEXT
);

CREATE TABLE servings (
  product_id TEXT PRIMARY KEY,
  serving_size TEXT,
  serving_size_unit TEXT,
  servings_per_container TEXT,
  household_measurement TEXT
);

CREATE TABLE nutrition_facts (
  product_id TEXT NOT NULL,
  nutrient TEXT NOT NULL,      -- e.g., "Calories", "Protein", "Vitamin D"
  quantity REAL,
  unit TEXT,
  percent_daily REAL,
  category TEXT,               -- "general" or "vitamin"
  PRIMARY KEY (product_id, nutrient)
);

CREATE TABLE categories (
  path TEXT PRIMARY KEY,       -- e.g., "Dairy > Milk > Whole Milk"
  name TEXT NOT NULL,          -- e.g., "Whole Milk"
  level INTEGER NOT NULL,      -- 0-4 (depth in hierarchy)
  product_count INTEGER
);

CREATE TABLE tags (
  name TEXT NOT NULL,
  type TEXT NOT NULL,          -- "filter" or "popular"
  product_count INTEGER,
  PRIMARY KEY (name, type)
);

-- Views for convenient queries
CREATE VIEW product_categories AS ...;
CREATE VIEW product_tags AS ...;

发展

npm test           # Run tests
npm run build      # Build TypeScript
npm run start      # Start MCP server

视窗

在本机Windows上,使用 cmd /c 包装:

claude mcp add --transport stdio forager -- cmd /c node /path/to/forager/dist/src/index.js

建筑

看 docs/architecture.md 有关多数据库设计的详细信息。

许可证

麻省理工学院