<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Patt S</title>
    <description>The latest articles on Forem by Patt S (@pattpjy).</description>
    <link>https://forem.com/pattpjy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1100882%2Fe4bf4ca2-b053-430b-a8df-4d46c8c5496c.png</url>
      <title>Forem: Patt S</title>
      <link>https://forem.com/pattpjy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pattpjy"/>
    <language>en</language>
    <item>
      <title>I Made My Family Dinner AI's Problem — Part 2: Now the Whole House Is In On It</title>
      <dc:creator>Patt S</dc:creator>
      <pubDate>Mon, 27 Apr 2026 18:23:09 +0000</pubDate>
      <link>https://forem.com/pattpjy/i-made-my-family-dinner-ais-problem-part-2-now-the-whole-house-is-in-on-it-2ng9</link>
      <guid>https://forem.com/pattpjy/i-made-my-family-dinner-ais-problem-part-2-now-the-whole-house-is-in-on-it-2ng9</guid>
      <description>&lt;p&gt;In &lt;a href="https://dev.to/pattpjy/i-made-my-family-dinner-ais-problem-kja"&gt;Part 1&lt;/a&gt;, I built a meal planning system with Claude — preference file, reusable skills, groceries pushed to my Kroger cart. It worked great. For me.&lt;/p&gt;

&lt;p&gt;But I was still the only person in the loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tool Was Mine. The Problem Was Ours.
&lt;/h2&gt;

&lt;p&gt;We already had a family shopping list on Home Assistant — a tablet in the kitchen, an app on our phones. My daughter spots we're low on applesauce? She adds it. My husband wants bread? He adds it.&lt;/p&gt;

&lt;p&gt;But my meal planner and the family shopping list lived in two completely separate worlds. Every week I'd generate a grocery list from the meal plan, separately check what the family had added, and manually merge them before ordering.&lt;/p&gt;

&lt;p&gt;I needed Claude to just read the Home Assistant list and merge it with the meal plan — one cart, no manual step in between.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting the Dots
&lt;/h2&gt;

&lt;p&gt;All our home stuff — Home Assistant, n8n, Nextcloud — runs on a server in our house. None of it is exposed to the public internet. It's just simpler that way — no security headaches, no public URLs to worry about.&lt;/p&gt;

&lt;p&gt;Here's why that matters: Unlike Claude Code, which runs things locally, Cowork is cloud-based — so it can't just reach into my home network. Anthropic's servers have no way to resolve our internal hostnames or route traffic into our house.&lt;/p&gt;

&lt;p&gt;I explored a couple of options — Claude's custom connectors, Cloudflare Tunnel — but they all came back to the same thing: either expose our home server to the internet, or it won't work.&lt;/p&gt;

&lt;p&gt;Then I remembered how the Kroger MCP server from Part 1 works — it runs right on my Mac, and my Mac is already on our home network. It can reach everything in the house. I didn't need to expose n8n to the outside. I just needed something on my Mac to pass messages between Claude and n8n.&lt;/p&gt;

&lt;p&gt;That's when two pieces clicked together. n8n has a built-in node called MCP Server Trigger that turns any workflow into an MCP endpoint. And &lt;code&gt;mcp-remote&lt;/code&gt; is an npm package you add to your Claude Desktop config — same config file from Part 1, one more entry — that forwards calls to that endpoint over your LAN.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Desktop (my Mac)
    │
mcp-remote (also on my Mac)
    │ HTTPS over LAN — never leaves the house
    ▼
n8n (home server)
    │
Home Assistant shopping list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"Remote" here means the other side of my Wi-Fi, not the internet. I built two n8n workflows behind this: one that reads the Home Assistant shopping list, one that removes items after they've been ordered.&lt;/p&gt;

&lt;h2&gt;
  
  
  From My Tool to Our Ecosystem
&lt;/h2&gt;

&lt;p&gt;This is the part that surprised me. What started as "I need to plan dinner" has turned into something the whole family uses without even knowing the AI part exists.&lt;/p&gt;

&lt;p&gt;My daughter and husband interact with Home Assistant — a tablet on the counter, an app on their phones. They add things to the shopping list when they notice something's running low. They don't know or care that on Thursday, Claude reads that list, merges it with the meal plan's groceries, deduplicates, and pushes everything to Kroger.&lt;/p&gt;

&lt;p&gt;The system now has three MCP servers working together in one conversation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;n8n bridge&lt;/strong&gt; — reads the family's Home Assistant shopping list&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Meal planner skills&lt;/strong&gt; — generates the week's grocery needs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kroger MCP&lt;/strong&gt; — adds everything to cart&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The family's "we need milk" and my "we need 4 lbs of chicken breast" end up in the same Kroger cart. Nobody did any manual merging. The people using it don't even know Claude is involved — they just know there's a shopping list on the kitchen tablet.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd Add to Part 1's Lessons
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Your home network is an underrated AI platform.&lt;/strong&gt; If you self-host anything, it can probably talk to Claude through this same bridge pattern. One config entry pointing at your LAN.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The best AI systems are invisible to most of their users.&lt;/strong&gt; My family interacts with a shopping list, not with Claude. The AI is plumbing, not a product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let the system grow from use, not from planning.&lt;/strong&gt; I didn't architect a "household automation ecosystem." I fixed dinner. Then I connected the shopping list. The ecosystem emerged.&lt;/p&gt;

&lt;p&gt;So — what's running on your home network that could use a bridge?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecowork</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>I Made My Family Dinner AI's Problem</title>
      <dc:creator>Patt S</dc:creator>
      <pubDate>Fri, 17 Apr 2026 19:26:05 +0000</pubDate>
      <link>https://forem.com/pattpjy/i-made-my-family-dinner-ais-problem-kja</link>
      <guid>https://forem.com/pattpjy/i-made-my-family-dinner-ais-problem-kja</guid>
      <description>&lt;p&gt;"Hey guys, what do you want for dinner?"&lt;/p&gt;

&lt;p&gt;"Whatever."&lt;/p&gt;

&lt;p&gt;You know what comes next. You make the "whatever." Then it's "I don't want that."&lt;/p&gt;

&lt;p&gt;I cook for three people. I have food allergies. There's a kid whose favorite meal changes daily. And then there's the one who claims he's not "picky." Everyone has opinions. Nobody wants to decide. But somehow it's still my job to figure it out — standing in the kitchen at 5 pm trying to remember what we had yesterday, while mentally filtering out tree nuts, no-go vegetables, and whatever my kid has decided she hates this week.&lt;/p&gt;

&lt;p&gt;I was spending more time &lt;em&gt;planning&lt;/em&gt; meals than cooking them. So I did what any reasonable, slightly fed-up person would do — I made it AI's problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting With the Boring Part (That Turned Out to Be Everything)
&lt;/h2&gt;

&lt;p&gt;The first thing I did with Claude wasn't ask it to generate a meal plan. It was to build a &lt;strong&gt;preference system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I know — going through "what do you eat, what can't you eat, what do you hate" for three people feels like paperwork. But this is the part that actually matters. I sat down and worked through a structured document that captured all the rules: who eats what, who's allergic to what, who hates what, what's preferred over the others. But beyond the profiles, I also had preferences as a cook — rules so I don't end up making three different dishes every night:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One protein per meal for everyone.&lt;/strong&gt; One protein, slightly different sides, different carb bases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cook once, eat twice.&lt;/strong&gt; Every dinner is cooked at 1.5x. Leftovers become the next day's lunch — no cooking, just reheat and assemble. This alone saves me probably 5 hours a week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sunday batch cooking.&lt;/strong&gt; I order groceries once a week to cover most of what we need. Sous vide proteins on Sunday — that covers Sunday through Thursday. Light prep on some vegetables to cut down weekday cook time. Friday is seafood, Saturday is grill night with fresh beef. Two trips to the meat counter per week, at most.&lt;/p&gt;

&lt;p&gt;All of this lives in a single &lt;code&gt;meal_preference.md&lt;/code&gt; file. It includes dietary profiles, a sauce library, base recipe templates (grain bowls, taco night, stir-fry night, chicken parm night), pantry staples, and a "previous weeks" section so we never repeat a menu.&lt;/p&gt;

&lt;h3&gt;
  
  
  The technical decision here
&lt;/h3&gt;

&lt;p&gt;I kept everything in markdown — no database, no app. Markdown is the format that works best as context for an LLM. The preference file &lt;em&gt;is&lt;/em&gt; the prompt, essentially.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Conversations to Skills
&lt;/h2&gt;

&lt;p&gt;With the preference system in place, I gave Claude the file and said "give me a meal plan for this week." What came back respected every rule — no tree nuts, no asparagus, spice split between the adults and the kid, sous vide proteins used within their 4-day storage window. Not a generic recipe dump. A real plan.&lt;/p&gt;

&lt;p&gt;But here's where it got interesting. I run everything through Claude Cowork, and the first few meal plans weren't perfect. I'd say "swap out Wednesday, my kid won't eat that" or "we need more variety in the sides" or "the leftover flow doesn't work if Thursday is a stir-fry." Each of those conversations taught me what the instructions needed to say more clearly.&lt;/p&gt;

&lt;p&gt;So I turned those conversations into &lt;strong&gt;skills&lt;/strong&gt; — reusable instruction sets that Claude loads every time. There's a meal planner skill, a weekly prep schedule skill, a shopping list skill. Each one is basically the distilled version of every correction and refinement from past conversations.&lt;/p&gt;

&lt;p&gt;This is why skills matter: without them, every conversation starts from zero. I'd have to re-explain the rules, the preferences, the cooking strategies — every single time. Skills are how the system &lt;em&gt;remembers&lt;/em&gt;. They're the difference between "AI that helps once" and "AI that gets better every week." When I improve a skill based on a conversation, every future session benefits. The knowledge compounds.&lt;/p&gt;

&lt;p&gt;I could have built a web app with a database. But natural language constraints are &lt;em&gt;more flexible&lt;/em&gt; than coded business logic. "My husband is doing a keto week" is a sentence, not a schema migration.&lt;/p&gt;

&lt;p&gt;Now, for grocery ordering — my first instinct was Claude in Chrome, just let it drive Kroger.com. It worked, technically. But 50+ items through browser automation chewed through tokens fast. Every click, every page load, every search result to process. That's what pushed us toward building a Kroger API integration instead — direct API calls are cheaper, faster, and don't break when Kroger redesigns a button.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Meal Plan to Shopping Cart
&lt;/h2&gt;

&lt;p&gt;Like I mentioned, Claude in Chrome could technically do this — but it was slow and token-heavy for 50+ items. I needed something leaner.&lt;/p&gt;

&lt;p&gt;So we built a Kroger API integration. Kroger has a public API (developer.kroger.com) that supports OAuth2 authentication, product search, and cart operations. I had Claude build a set of Python scripts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;kroger_auth.py&lt;/code&gt; — OAuth2 flow to connect my Kroger account&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;kroger_stores.py&lt;/code&gt; — finds my nearest store by zip code&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;kroger_search.py&lt;/code&gt; — searches for products at my store&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;kroger_add_to_cart.py&lt;/code&gt; — adds items to my cart&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;shopping_list_to_cart.py&lt;/code&gt; — the big one: reads the shopping list, searches for each item, picks the best match, and adds everything to cart&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The shopping list file was formatted specifically for Kroger's search — "boneless skinless chicken breast 4 lb" instead of "chicken breasts (8, ~4 lbs)" because Kroger's search works better with product-catalog-style descriptions.&lt;/p&gt;

&lt;p&gt;I also had Claude generate a setup guide (&lt;code&gt;KROGER_SETUP.md&lt;/code&gt;) in plain English so I could recreate the whole thing if I needed to.&lt;/p&gt;

&lt;h3&gt;
  
  
  The technical decision here
&lt;/h3&gt;

&lt;p&gt;I went with direct API integration instead of browser automation. I considered using something like Playwright to just drive Kroger.com, and honestly it would have been faster to build initially. But browser automation is fragile — one UI change and it breaks. The API is versioned and stable. The tradeoff is that the Kroger Cart API only supports &lt;em&gt;adding&lt;/em&gt; items, not modifying quantities or removing things. Good enough for my use case, but worth knowing.&lt;/p&gt;

&lt;p&gt;I also chose Python over Node for the scripts because the Kroger API's OAuth2 flow maps cleanly to Python's &lt;code&gt;requests&lt;/code&gt; library, and I didn't need any async capabilities. Simple tools for a simple job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The MCP Server (Where It Actually Got Good — After Some Wrong Turns)
&lt;/h2&gt;

&lt;p&gt;The scripts worked. But the workflow still had friction. I'd generate a meal plan in a conversation with Claude, get a shopping list, and then have to open a terminal, navigate to the right folder, and run a bash command. It's not a lot of steps, but it breaks the flow. You go from conversational to command-line and back.&lt;/p&gt;

&lt;p&gt;So I built a local MCP server. And the build itself was way easier than I expected — but everything &lt;em&gt;around&lt;/em&gt; the build was where we got tripped up.&lt;/p&gt;

&lt;h3&gt;
  
  
  The actual code was almost anticlimactic
&lt;/h3&gt;

&lt;p&gt;MCP — Model Context Protocol — is a way to give AI tools direct access to external services. The Python SDK has a decorator-based API called &lt;code&gt;FastMCP&lt;/code&gt; that makes tool definition trivial:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp.server.fastmcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastMCP&lt;/span&gt;
&lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastMCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Kroger&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@mcp.tool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;kroger_find_stores&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;zip_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Find Kroger stores near a ZIP code.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# ... your implementation
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stores&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[...]})&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The docstring becomes the tool description Claude sees. The function signature becomes the input schema. Return a string; Claude parses it. The whole &lt;code&gt;server.py&lt;/code&gt; is under 250 lines and covers all four tools plus OAuth token management.&lt;/p&gt;

&lt;p&gt;If you've heard "MCP" thrown around and it sounds intimidating — it shouldn't be. The SDK does almost everything. (&lt;a href="https://github.com/pattpjy/kroger-mcp" rel="noopener noreferrer"&gt;Full repo on GitHub&lt;/a&gt;)&lt;/p&gt;

&lt;h3&gt;
  
  
  The detour that taught me the most about working with AI
&lt;/h3&gt;

&lt;p&gt;Here's where I need to be honest about a mistake — not a code mistake, a &lt;em&gt;prompting&lt;/em&gt; mistake.&lt;/p&gt;

&lt;p&gt;When I asked Claude to help me get the MCP server working in Cowork (Anthropic's cloud-based conversational interface), I gave it a general prompt: "I want this to work in Claude Cowork." Claude confidently laid out two elaborate paths — one involving publishing to the MCP Registry with PyPI tooling, the other involving HTTP transport with multi-tenant OAuth deployed to the public internet.&lt;/p&gt;

&lt;p&gt;Both sounded plausible. Both were detailed and well-reasoned. Both would have been days of work.&lt;/p&gt;

&lt;p&gt;Both were completely unnecessary.&lt;/p&gt;

&lt;p&gt;The problem wasn't that Claude was wrong about how MCP &lt;em&gt;used to work&lt;/em&gt;. The problem was that MCP is evolving fast, and Claude was building on training knowledge — its understanding of the ecosystem from whenever its data was last updated. Things had changed. The answer had gotten simpler, but Claude didn't know that because I didn't tell it to go check.&lt;/p&gt;

&lt;p&gt;What I should have said was: &lt;em&gt;"Before we plan anything, research the most up-to-date MCP documentation and tell me how Cowork actually connects to local servers."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The actual answer? Claude Cowork bridges to your local Claude Desktop. Register your stdio server in Desktop's config, restart, and Cowork can use it. One JSON file edit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;~/Library/Application&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Support/Claude/claude_desktop_config.json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(macOS)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"kroger"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"/absolute/path/to/server.py"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"KROGER_CLIENT_ID"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"KROGER_CLIENT_SECRET"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart Desktop. Done.&lt;/p&gt;

&lt;p&gt;This is the lesson I keep coming back to: &lt;strong&gt;AI will confidently build on stale knowledge if you don't tell it to check.&lt;/strong&gt; It doesn't know what it doesn't know. Especially with fast-moving tools, the answer from six months ago might be completely wrong today. "Research the current docs first" is a better prompt than "here's what I want to build." A vague prompt plus an outdated mental model equals a very convincing plan that wastes your time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd Tell Someone Starting a Project Like This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Give the AI structure, not just questions.&lt;/strong&gt; The preference file does most of the heavy lifting. Without it, I'd get generic meal suggestions. With it, I get plans that respect three people's allergies, preferences, and cooking realities. The quality of AI output is directly proportional to the quality of context you provide.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Close the loop to the real action.&lt;/strong&gt; A meal plan is nice. A meal plan that turns into a shopping list that goes directly into my Kroger cart — that's the difference between a tool I use once and a system I use every week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build the simple thing first.&lt;/strong&gt; Scripts → MCP server was a natural progression. I didn't design it up front — I built the simple thing, used it, felt the friction, and upgraded. Each step was useful on its own. If I'd tried to architect the final version from scratch, I'd still be planning instead of cooking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tell the AI to look things up before it plans.&lt;/strong&gt; I cannot stress this enough. Especially with fast-moving tools. "Research the current docs first" saves you from confidently building the wrong thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Full Pipeline Today
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Preferences&lt;/strong&gt; — &lt;code&gt;meal_preference.md&lt;/code&gt; holds all dietary profiles, rules, recipes, and history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Meal Plan&lt;/strong&gt; — Claude generates a personalized weekly plan from the preferences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shopping List&lt;/strong&gt; — Aggregated, categorized, and formatted for Kroger's catalog&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kroger Cart&lt;/strong&gt; — Pushed directly via MCP server, no terminal required&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thursday, I generate the meal plan. Friday the groceries get delivered. Sunday is meal prep day. The whole thing takes maybe 10 minutes of my time for a week of meals for three people with completely different dietary needs.&lt;/p&gt;

&lt;p&gt;Not bad for a markdown file and a bit of Python.&lt;/p&gt;

&lt;p&gt;So — what's the thing eating your brain every week? How are you using AI to get through it?&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
