search_stores
Find real local stores (restaurants, groceries, bakeries, bodegas, markets) in a city. Returns merchant-submitted listings, not scraped delivery-app menus.
citytypequerycategory
io.github.CloudCorpRecordsPublished by GitHub account CloudCorpRecordsv0.3.1Updated Nov 2, 2026
The open store index for AI agents: merchants list real stock, agents find local food and stores.
ShelfSignal is a local MCP server over an open index of merchant-submitted local store listings, letting an assistant find stores and items and score stock…
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Follow the launch instructions in the repository.
The open store index for AI agents.
Local merchants list what they actually sell. AI agents find real food and real products nearby, score how likely each item is actually in stock, and check a validation receipt before they send a human across town. Merchants pay one flat price to get listed. Nobody takes 30% of their food.
DoorDash and the delivery apps built a closed index: they own the customer, scrape or rent the menu, charge the merchant 15-30% per order, and still cannot tell you whether the kitchen has the thing you want. ShelfSignal is the opposite shape:
A read-only HTTP API over the same registry, for agents and clients that do not speak MCP:
Only listings in the live state are served: listings still in the intake queue are excluded from list and search, and their detail route returns 404. Full reference: docs/API.md.
You run a store in the city. For $100 you get listed where the agents look:
No commission. No tablet on your counter. No competing with your own listing.
registry/stores.json (v0.1, git-backed, every change reviewable).Bundled stores are sample data and are flagged demo: true in every response. Real merchants are never marked demo, and demo stores are never presented as real.
MIT
Source: README.md at commit e472708
Find real local stores (restaurants, groceries, bakeries, bodegas, markets) in a city. Returns merchant-submitted listings, not scraped delivery-app menus.
citytypequerycategoryFind listed stores near a point (lat/lng), nearest first, each with distance in km and an open-now signal (null when the store has no structured hours: unknown, not a guess).
latrequiredlngrequiredradius_kmFind a specific food or product across listed stores, e.g. 'birria tacos' or 'oat milk'. Every hit carries its stock verdict (score, band, reasons), best evidence first. Never present an 'uncertain' or 'unlikely' verdict to a human as available.
cityqueryrequiredFull listing for one store by registry id: hours, address, fulfillment, and every item with its last-confirmed stock status.
store_idrequiredScore how likely a store actually has an item right now. Returns a 0-100 score, a band (likely / probable / uncertain / unlikely), and the reasons. Never present an 'uncertain' or 'unlikely' verdict to a human as available.
itemrequiredstore_idrequiredRun the ShelfSignal validation checks on a listing and return its receipt: tier (VERIFIED / LISTED / STALE / INCOMPLETE), score, and every check with its evidence. Use this before recommending a store you have not used before.
store_idrequiredValidate a merchant submission (the $100 Starter Store intake) and preview exactly how it would appear in the registry, with its validation receipt. Does not charge anything and does not publish until the listing is merged into the registry.
submissionrequiredWhich cities and categories the index currently covers, with store counts. Check coverage before promising a human you can search somewhere.
Takes no parameters.
90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
npm installnpm run buildnpm test
node dist/cli.js coveragenode dist/cli.js search "birria" --city "San Francisco"node dist/cli.js stock sf-mission-taqueria-demo "Birria tacos"node dist/cli.js nearby 37.7599 -122.4148 --radius 5node dist/cli.js ping sf-sunset-bakery-demo "Cardamom knot" innode dist/cli.js validate sf-mission-taqueria-demonode dist/cli.js doctornode dist/cli.js mcp # run the MCP server (stdio)node dist/cli.js serve # run the hosted registry API (http://0.0.0.0:8787)curl localhost:8787/v1/stores?city=San%20Franciscocurl localhost:8787/v1/stores/sf-mission-taqueria-democurl "localhost:8787/v1/search?q=birria"