Security
Last updated: September 14, 2026
The Meal Plan Vault is built to be used by people and by AI agents acting on their behalf. An agent that can rewrite your week and your shopping list needs tighter handling than a recipe box does, so this page covers how connections are authorized, what an agent can reach, and how you audit or stop it.
Accounts and sign-in
- Authentication is handled by Stack Auth. We never see or store your password.
- All traffic runs over HTTPS. The app is hosted on Vercel and the database is managed Postgres on Neon, both encrypted in transit and at rest.
- Every recipe, meal plan, grocery list, and pantry item belongs to a household. Queries are scoped to households you are a member of, so another household's data is not reachable from your account.
- Household roles are admin, editor, and viewer. Viewers can read but cannot change recipes or plans, and only admins can manage the household or invite members.
Connecting an AI agent
The vault exposes an MCP (Model Context Protocol) server at https://www.mealplanvault.com/mcp. Any MCP-compatible client — Claude, Claude Code, ChatGPT, Cursor, Goose, Zed and others — can connect to it.
- Connections use OAuth 2.1 with PKCE and dynamic client registration (RFC 7591). You approve the connection in your browser, signed in as yourself.
- There are no API keys to generate, paste, or store in a config file. Your password is never sent to the agent.
- Access tokens expire after one hour. Refresh tokens are rotated on every use, and tokens are stored only as hashes.
What a connected agent can reach
A connected agent gets 19 tools: 6 that read and 13 that write. Nothing else in your account is exposed over MCP — not billing, not household administration, not other members' personal settings.
Read tools: list_recipes, get_recipe, get_meal_plan_week, list_grocery_lists, get_grocery_list, list_pantry_items.
Write tools: create_recipe, import_recipe_from_url, update_recipe_notes, set_meal_plan_entry, remove_meal_plan_entry, create_grocery_list, add_grocery_list_item, check_grocery_list_item, remove_grocery_list_item, delete_grocery_list, add_pantry_item, update_pantry_item, remove_pantry_item.
- Read and write are separate OAuth scopes. A read-only connection cannot call a write tool, and that check runs on our server rather than in the client.
- An agent inherits your household role. If you are a viewer, your agent can read the plan and cannot change it.
- An agent only ever acts inside households you belong to.
- Clients that support per-tool permissions, such as Claude, list each tool by name so you can set it to ask first, always allow, or off.
Auditing and revoking
- Every tool call is recorded: which tool ran, which agent called it, whether it read or wrote, whether it succeeded, and when. You can read the log at Dashboard → Agents.
- Revoking a connection invalidates all of its tokens immediately, including refresh tokens. The agent stops working on its next request.
- The activity log survives revocation, so disconnecting an agent does not erase the record of what it did.
- You can export your household's full data at any time from Settings, and deleting your account removes your data.
What we ask of you
- Only connect agents and clients you trust. An agent you approve can act with your permissions.
- Review the connected list now and then and revoke anything you no longer use.
- If a client offers per-tool permissions, consider leaving the destructive ones — deleting a grocery list, clearing a meal plan slot — set to ask first.
Reporting a vulnerability
If you find a security problem, please tell us before disclosing it publicly. Email security@mealplanvault.com with steps to reproduce. We will acknowledge your report and keep you updated while we work on a fix. We are a small team, so please give us reasonable time to respond.
Please do not run automated scans against production, access other people's households, or destroy data while testing.
Related
See the MCP connection guide for setup steps, and the Privacy Policy for how we handle your data.