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

@agentprolabs/pet-recall-mcp

v0.1.0

Published

Monitor pet food and drug recalls from Canadian (CFIA) and US (FDA) government sources

Readme

Pet Recall Watcher MCP

An open-source Model Context Protocol server that monitors pet food and veterinary drug recalls from the Government of Canada (CFIA / Health Canada) and the US FDA (openFDA), making recall data queryable by AI assistants like Claude.

Built by AgentProLabs · Open source under MIT

Status: v0.1. The npx package is pending its first npm publish; the landing page is live at recalls.agentprolabs.com. A hosted HTTP/SSE MCP endpoint is planned for v0.2 — for now use the stdio server below.

What it does

Recall communication at the vet-clinic level is a scramble of distributor emails and listservs, with no machine-readable feed. Pet Recall Watcher ingests the public government recall datasets daily and exposes them over MCP so an AI assistant can answer questions on a clinic's behalf.

  • Daily ingestion of pet-relevant recalls from the Government of Canada open dataset and the openFDA food + drug enforcement endpoints.
  • Three MCP tools:
    • query_active_recalls — search/filter active recalls by species, category, region, and date range.
    • lookup_product_status — fuzzy-match a product name against the recall database (handles partial names and minor misspellings).
    • subscribe_recall_alerts — register an email for filtered recall alerts.
  • Email notifications via Resend when new recalls match a subscription.
  • Landing page with a subscribe form and a recent-recalls feed.

It runs as a local stdio server (via npx) for desktop AI clients.

Quick Start (stdio)

Run directly with npx — no install needed:

npx @agentprolabs/pet-recall-mcp

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "pet-recall-watcher": {
      "command": "npx",
      "args": ["-y", "@agentprolabs/pet-recall-mcp"]
    }
  }
}

Restart Claude Desktop — the tools appear automatically. Then ask, e.g., "Are there any recent dog food recalls in Canada?"

Requirements: Node.js 20+. No configuration needed — the server is a thin client over the hosted Pet Recall API, so there are no API keys or database credentials to set. (Advanced/self-host: override the API origin with the PET_RECALL_API_URL env var.)

Tools

query_active_recalls

Returns active pet food and drug recalls, with optional filtering. Sorted by recall date (newest first), paginated.

| Parameter | Type | Default | Description | | ------------------ | -------------------------------------------------------------- | ------- | ---------------------------------- | | species | "dog" | "cat" | "all" | "all" | Filter by affected species | | product_category | "food" | "treat" | "drug" | "supplement" | "all" | "all" | Filter by product type | | region | "canada" | "us" | "all" | "all" | Filter by recall origin | | since_date | ISO 8601 date string | — | Only recalls on or after this date | | limit | number (1–100) | 20 | Results per page | | offset | number | 0 | Pagination offset |

Example response:

{
  "recalls": [
    {
      "id": "1e6a57aa-80f6-400a-9896-a7f90baf4cfc",
      "title": "Primal Patties for Dogs Beef Formula recalled due to Listeria",
      "source": "canada_recalls",
      "source_id": "64441",
      "species": ["dog"],
      "product_category": "food",
      "product_names": ["Primal Patties for Dogs – Beef Formula"],
      "brand": null,
      "risk_level": null,
      "reason": "Microbial hazard",
      "region": "canada",
      "recall_date": "2022-08-05",
      "source_url": "https://recalls-rappels.canada.ca/en/alert-recall/...",
      "data_freshness": "2026-06-02 23:17:23+00"
    }
  ],
  "total_count": 1,
  "limit": 20,
  "offset": 0
}

lookup_product_status

Check whether a specific product has been recalled. Uses PostgreSQL pg_trgm fuzzy matching against product names and brand — partial names and minor misspellings still find results. No match is a valid, useful answer (not an error).

| Parameter | Type | Required | Description | | ----------------- | ----------------- | ---------- | ----------------------------------------------- | | query | string (≥2 chars) | Yes | Product name, brand, or UPC to look up | | match_threshold | number (0.1–1) | No (0.3) | Minimum similarity score (lower = more results) |

Example response (match found):

{
  "matches": [
    {
      "title": "FRESHPET SELECT ... REFRIGERATED DOG FOOD",
      "source": "openfda_food",
      "risk_level": "Class II",
      "recall_date": "2019-07-31",
      "source_url": null,
      "similarity_score": 0.72,
      "matched_field": "product_name"
    }
  ],
  "query": "freshpet dog food",
  "total_matches": 1,
  "data_freshness": "2026-06-02 23:17:23+00"
}

Example response (no match):

{
  "matches": [],
  "query": "asdfghjkl",
  "total_matches": 0,
  "data_freshness": null
}

subscribe_recall_alerts

Subscribe an email to recall alerts matching optional filters. A duplicate (same email + filters) returns the existing subscription rather than creating a new one.

| Parameter | Type | Required | Description | | ------------------ | -------------------------------------------------------------- | ------------ | ---------------------------------------------------------------- | | email | string | Yes | Email address for alerts | | species | "dog" | "cat" | "all" | No ("all") | Only alert for this species | | product_category | "food" | "treat" | "drug" | "supplement" | "all" | No ("all") | Only alert for this category | | region | "canada" | "us" | "all" | No ("all") | Only alert for this region | | webhook_url | string | No | RESERVED for Phase 2 PMS integration — accepted but not acted on |

Example response:

{
  "subscription_id": "e5f6g7h8-...",
  "email": "[email protected]",
  "filters": {
    "species": "dog",
    "product_category": "food",
    "region": "canada"
  },
  "status": "active",
  "created_at": "2026-06-02T00:00:00Z",
  "message": "Subscription created"
}

Resources

recent-recalls

URI: recall-feed://recent

Returns the 20 most recent recalls across all sources as JSON — lets a client show current recall activity without calling a tool.

Prompts

check-product-safety

A pre-built prompt that takes a product name, runs the fuzzy lookup, and frames the result for a plain-language safety summary.

| Argument | Type | Required | Description | | -------------- | ------ | -------- | -------------------- | | product_name | string | Yes | The product to check |

Server Info

| Field | Value | | --------- | -------------------------------------- | | Name | pet-recall-watcher | | Version | 0.1.0 | | Protocol | MCP (Model Context Protocol) | | Transport | stdio (local); HTTP/SSE planned (v0.2) | | Tools | 3 | | Resources | 1 | | Prompts | 1 |

Data sources

Daily ingestion from three public, unauthenticated government datasets — CFIA (Canada), openFDA food, and openFDA drug enforcement. See docs/DATA-SOURCES.md for endpoints, schema mappings, freshness caveats, and the pet-relevance filtering strategy.

Development

npm install
npm run typecheck   # tsc --noEmit
npm run lint        # eslint .
npm run test        # vitest run
npm run build       # tsc -> dist/

Architecture: shared logic in src/ (data-sources, tools, db, notifications); Cloudflare Workers in workers/ (mcp-server, ingestion, api, notification); the Astro landing page in landing/. See IMPLEMENTATION_LOG.md for the build playbook and docs/PHASE2-HOOKS.md for deferred features.

Coming later

  • Hosted HTTP/SSE MCP endpoint at recalls.agentprolabs.com/mcp (v0.2).
  • match_recall_to_patients — cross-reference a recall against a clinic's patient product records (Phase 2; see docs/PHASE2-HOOKS.md).

Built by AgentProLabs · Source · Open source under MIT.