MCP tools for Malawian food search, clinical nutrition calculators, and RAG-backed guidance.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An MCP (Model Context Protocol) server that exposes the Chakudya Nutrition Registry (CNR) API as a set of MCP tools, so any MCP-compatible client (Claude, Claude Code, other LLM agents) can search Malawian food data, run clinical nutrition lookups, and query the RAG knowledge base directly.
This is a new, separate layer. It does not replace or modify the Chakudya Worker. It's a small Node/TypeScript HTTP service that sits in front of your existing API and translates MCP tool calls into plain HTTP requests against the routes your Worker already serves.
The official MCP TypeScript SDK's StreamableHTTPServerTransport is built for Node's
http.IncomingMessage/ServerResponse. Cloudflare Workers use the Fetch API instead, and the SDK's
web-standard variant (WebStandardStreamableHTTPServerTransport) is newer and less battle-tested for
production session management. Running this as a plain Node service (Docker, Render, Fly.io, a VPS,
etc.) is the more standard, better-documented path today, and it keeps this concern fully decoupled from
your Worker's deploy cycle. Nothing stops you from porting it to the web-standard transport on Workers
later if you want a single-platform deploy β the tool logic in src/tools/* doesn't care which
transport wraps it.
All 31 tools either call your existing Chakudya Worker over HTTPS, or are pure in-process calculation/table
lookups β none of them touch Supabase, Cohere, or Groq directly, and none of them need ADMIN_API_KEY
(every route they use is public).
| Tool | Chakudya route(s) used |
|---|---|
search_food | GET /foods β falls back to GET /foods/lookup |
get_food_details | GET /foods/:id |
calculate_nutrients | GET /foods or /foods/:id, then scales per-100g values in-process |
analyze_meal | same as above, looped and summed across multiple items |
barcode_lookup | GET /packaged?barcode= β falls back to GET /foods/lookup?barcode= |
packaged_food_search | GET /packaged and/or GET /products |
diabetes_exchange_lookup | GET /exchange |
renal_exchange_lookup | GET /renal |
enteral_formula_lookup | GET /formulas |
nutrition_calculator | none β pure BMI/BMR (Mifflin-St Jeor)/TDEE math |
rag_retrieve | POST /rag/retrieve |
search_guidelines | POST /rag/ask (context: "clinical") |
retrieve_evidence | POST /rag/ask (context: "both", higher top_k) |
disease_information | POST /rag/ask, query framed for educational disease overview |
medicine_information | POST /rag/ask, query explicitly instructed to exclude dosing/prescribing |
pediatric_fluid_requirements | none β pure Holliday-Segar math |
pediatric_energy_requirements | none β pure Schofield/WHO BMR + DRI/FAO 2004 + DRI/IOM 2006 math |
pediatric_protein_requirements | none β pure IOM 2005 / ASPEN sick-child / preterm table lookup |
pediatric_growth_velocity | none β pure ASPEN handbook growth-velocity table lookup |
pediatric_enteral_feed_advancement | none β pure enteral feed protocol table lookup |
iom_dri_eer_calculator | none β pure IOM/DRI (2002/2005) EER prediction-equation math, all life stages |
met_activity_energy_calculator | none β pure MET x weight x duration math |
alcohol_kcal_calculator | none β pure volume x proof math |
respiratory_quotient_interpreter | none β pure RQ reference-value interpretation |
preterm_fluid_energy_requirements | none β pure preterm fluid/energy table lookup |
macronutrient_distribution_check | none β pure DRI macronutrient % range table lookup |
tee_activity_band_estimator | none β pure REE x activity-band multiplier math |
fever_stress_ree_adjustment | none β pure fever REE adjustment math |
atwater_food_energy_calculator | none β pure Atwater factor (4/9/4/7) math |
dri_eer_reference_lookup | none β pure DRI Table 2.2 reference table lookup |
who_growth_zscore | none β pure WHO growth reference LMS z-score/percentile calculation (weight-for-age, height-for-age, BMI-for-age 0-5y, BMI-for-age 5-19y, head-circumference-for-age, weight-for-length, weight-for-height) |
disease_information and medicine_information always return an educational disclaimer alongside the
answer and are prompted to avoid diagnosis/prescribing language β but they're still LLM-generated text
grounded on whatever's in your RAG knowledge base, not a verified medical reference. Treat them as a
starting point for a learner, same as the rest of the RAG-backed tools.
pediatric_* tools (source: BND 415 Clinical Nutrition β Paediatric Medicine Resources) and
iom_dri_eer_calculator/met_activity_energy_calculator/alcohol_kcal_calculator/
respiratory_quotient_interpreter (source: Nelms/Ireton-Jones, Nutrition Therapy and Pathophysiology,
Ch. 2) are pure calculation/lookup tools β no network call, no CNR data dependency. Same estimate-only
caveat applies: not a substitute for individualized clinical assessment or measured indirect calorimetry.
Copy .env.example to .env and fill in:
| Variable | Required | Notes |
|---|---|---|
CHAKUDYA_API_BASE_URL | no (defaults to the maintainer's own Worker) | If you're forking this repo to front your own CNR instance, set this to your own Worker's URL instead of relying on the default |
CHAKUDYA_ADMIN_API_KEY | no | Not used by any current tool; only needed if you add an admin-gated tool later |
PORT | no (default 8787) | |
MCP_AUTH_TOKEN | yes in production | Bearer token MCP clients must send. Server refuses to start in production without it |
MCP_ALLOWED_ORIGINS | no | Comma-separated CORS origins; leave blank to disable browser access |
MCP_RATE_LIMIT_PER_MIN | no (default 60) | Per-IP cap on this server's own /mcp endpoint |
NODE_ENV | no (default development) | Set to production for deploys |
env.ts exits the process at startup if NODE_ENV=production and
MCP_AUTH_TOKEN is unset β this is a deliberate fail-closed check, not just a warning./rag/ask on your Worker is capped at
15 req/min per IP β but that's per client IP as seen by the Worker, which would be this server's
IP once deployed, shared across everyone using it. The MCP-level rate limiter
(MCP_RATE_LIMIT_PER_MIN) exists so one misbehaving MCP client can't silently exhaust that budget for
everyone else. Tune it down if you expect multiple concurrent MCP clients.CHAKUDYA_ADMIN_API_KEY server-side only β never expose it to the MCP
client.Mcp-Session-Id) or swap the
transports map in src/index.ts for a shared store.MCP_ALLOWED_ORIGINS if you have a specific browser-based MCP
client; server-to-server MCP clients (Claude Desktop, Claude Code, etc.) don't need it.Or for iterative dev with auto-reload:
Health check: curl http://localhost:8787/health
Point any Streamable-HTTP-capable MCP client at:
For Claude Desktop / Claude Code, add it as a remote MCP server pointing at that URL with the same
bearer token. Consult Anthropic's current docs for the exact config file syntax, since that's changed
over time β check https://docs.claude.com for the latest mcpServers remote-server format.
This repo includes render.yaml, so Render's Blueprint feature deploys it without any manual dashboard
configuration.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/chakudya-mcp-server)<a href="https://allmcps.com/mcp/chakudya-mcp-server"><img src="https://allmcps.com/api/badge/chakudya-mcp-server?style=directory" alt="Chakudya MCP Server on AllMCPs" /></a>