agent-chef-mcp 1.0.0 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/catalog.json +399 -7
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -73,7 +73,7 @@ Client config for stdio:
|
|
|
73
73
|
Without a key the server still lists everything; tool calls return a message explaining where to get a key.
|
|
74
74
|
`npm run sync` refreshes `catalog.json` from the live server; `npm test` runs a stdio smoke test.
|
|
75
75
|
|
|
76
|
-
## Tools (
|
|
76
|
+
## Tools (37)
|
|
77
77
|
|
|
78
78
|
| Area | Tools |
|
|
79
79
|
|---|---|
|
|
@@ -82,7 +82,7 @@ Without a key the server still lists everything; tool calls return a message exp
|
|
|
82
82
|
| Preferences | `get_recipe_preferences`, `update_recipe_preferences` |
|
|
83
83
|
| Household | `get_members`, `upsert_member`, `remove_member` |
|
|
84
84
|
| Pantry | `get_ingredients`, `update_ingredients` |
|
|
85
|
-
| Recipes | `search_recipes`, `get_recipe`, `update_recipe`, `import_recipe`, `get_favorite_recipes`, `favorite_recipe`, `get_past_recipes` |
|
|
85
|
+
| Recipes | `search_recipes`, `get_recipe`, `update_recipe`, `import_recipe`, `import_recipes`, `create_recipe`, `set_recipe_image`, `get_favorite_recipes`, `favorite_recipe`, `get_past_recipes` |
|
|
86
86
|
| Weekly cycle | `propose_recipes`, `add_candidates`, `message_group`, `add_vote`, `add_ballot_feedback`, `get_past_votes`, `get_current_week`, `set_this_weeks_recipes`, `reopen_voting`, `set_voting_deadline`, `rate_recipe` |
|
|
87
87
|
| Shopping | `assemble_online_grocery_order`, `record_grocery_order` |
|
|
88
88
|
|
package/catalog.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"synced_at": "2026-09-
|
|
2
|
+
"synced_at": "2026-09-08T21:03:09.112Z",
|
|
3
3
|
"server": {
|
|
4
4
|
"name": "agent-chef",
|
|
5
5
|
"version": "0.4.0"
|
|
6
6
|
},
|
|
7
|
-
"instructions": "# How to run Agent Chef\n\nYou are the household's agent. Agent Chef is the state machine; you are the hands. You never need to remember where the week stands: the server tells you.\n\nRUN LOOP. When the user says \"run agent chef\", call run_agent_chef (it returns this manual, today's checklist, and whether a recurring schedule exists) and follow it. The first time, also schedule yourself to run \"Run Agent Chef.\" twice a day (09:00 and 18:00 in the household's timezone) and confirm it with record_schedule, so the whole week runs end to end without anyone asking. Then:\n1. Call next_actions.\n2. Execute the returned actions in order. Each one names the tool, why it's due, and the arguments or message text to use. Where an argument is in <angle brackets>, you fill it in (e.g. write the 10 recipes).\n3. Call next_actions again. Repeat until it returns no actions, then stop and report a one-line summary.\n\nWHAT THE PHASES MEAN\n- new_cycle: it's past the household's plan day.
|
|
7
|
+
"instructions": "# How to run Agent Chef\n\nYou are the household's agent. Agent Chef is the state machine; you are the hands. You never need to remember where the week stands: the server tells you.\n\nRUN LOOP. When the user says \"run agent chef\", call run_agent_chef (it returns this manual, today's checklist, and whether a recurring schedule exists) and follow it. The first time, also schedule yourself to run \"Run Agent Chef.\" twice a day (09:00 and 18:00 in the household's timezone) and confirm it with record_schedule, so the whole week runs end to end without anyone asking. Then:\n1. Call next_actions.\n2. Execute the returned actions in order. Each one names the tool, why it's due, and the arguments or message text to use. Where an argument is in <angle brackets>, you fill it in (e.g. write the 10 recipes).\n3. Call next_actions again. Repeat until it returns no actions, then stop and report a one-line summary.\n\nWHAT THE PHASES MEAN\n- new_cycle: it's past the household's plan day. Propose 10 recipes and send the ballot. Last week's unrated dinners are collected on the ballot page itself (a rating card sits above the new options), so don't send a separate rating request; the ballot text mentions it.\n- voting: people vote on their personal links until voting_closes_at (household setting: weekday + time; set_voting_deadline moves it). You may be asked to send one reminder to non-voters shortly before the deadline, or to add 2-3 options answering ballot feedback. When everyone has voted or the deadline passes, lock in the winners, announce them, and build the cart.\n- shopping: assemble_online_grocery_order gives you the list minus the pantry plus the household's shopping_preferences (brands, organic, substitutions): follow them when picking products. Fill the cart in the store's website, show the total, and STOP for explicit approval before checkout. Then record_grocery_order.\n- cooking / idle: nothing to do until the next plan day.\n\nWRITING RECIPES (propose_recipes / add_candidates): read get_recipe_preferences first. Source recipes from real pages: import_recipe(url) saves a recipe from a trusted site with its photo, ingredients and steps, then pass its recipe_id; aim for most of the ballot to come from real sources. search_recipes finds anything already in the library. PHOTOS ARE YOUR JOB: every candidate should have a real image_url (the source page's photo, or one you found by searching). The server checks each URL is a live image and rejects dead ones; a card without a photo means you skipped this. If no real photo exists, generate one with your image tool (a realistic photo of the plated dish, natural light, no text, no people) and attach it with set_recipe_image, which stores it permanently; image-tool URLs expire, so never pass them as image_url directly. After propose_recipes, check the returned candidates for a missing image_url and fix each with set_recipe_image. Use get_favorite_recipes (include 1-2), get_past_recipes (avoid repeats from the last ~4 weeks), get_past_votes (lean into what wins), get_ingredients (use what's on hand). Each recipe: title, one appetizing sentence, servings, complete ingredients with quantities, steps, tags, and a real image_url (see PHOTOS).\n\nMESSAGING: message_group sends push notifications (to members who tapped \"notify me\" on their vote page), SMS or email, and personalises {vote_link} per person; channel auto picks push first, then text, then email. Pass the kind the action specifies so the server can track what was sent. If the household prefers, you may post the same text into their own group chat instead; still call message_group so it's logged (it dry-runs if no provider is configured).\n\nSWITCHING FROM ANOTHER APP: when the owner lists meals they loved elsewhere (Mealime, a meal kit, a recipe manager), find a real recipe page for each name on a well-known recipe site, then save them all at once with import_recipes (favorite_all: true); URLs they give you go straight in. If you have a browser tool, you can collect the favorites yourself: open the old app, let the owner sign in (never type their password), gather the recipe links, then import. Mealime and HelloFresh recipe pages import cleanly; Blue Apron and Marley Spoon block automated fetching, so for those read each recipe card in your browser and save it with create_recipe (title, ingredients with quantities, steps, servings, photo URL, source link, favorite: true). Use create_recipe whenever import_recipe fails on a page you can read. Report what you saved and what you could not find. Favorites are re-proposed on future ballots.\n\nHOUSEHOLDS OF ONE work the same way: one voter, top N by their votes, same loop. Never block on adding members.\n\nRULES: never invent a vote or a rating; never check out without explicit approval in this conversation; keep messages short and friendly; if a tool errors, fix the input and retry once, then report.",
|
|
8
8
|
"tools": [
|
|
9
9
|
{
|
|
10
10
|
"name": "run_agent_chef",
|
|
@@ -964,7 +964,7 @@
|
|
|
964
964
|
{
|
|
965
965
|
"name": "get_members",
|
|
966
966
|
"title": "Get household members",
|
|
967
|
-
"description": "List household members with contact info and their personal vote links.",
|
|
967
|
+
"description": "List household members with contact info, whether they get push notifications, and their personal vote links.",
|
|
968
968
|
"inputSchema": {
|
|
969
969
|
"type": "object",
|
|
970
970
|
"properties": {}
|
|
@@ -1023,6 +1023,13 @@
|
|
|
1023
1023
|
"null"
|
|
1024
1024
|
],
|
|
1025
1025
|
"description": "Personal voting page for this member"
|
|
1026
|
+
},
|
|
1027
|
+
"push_subscribed": {
|
|
1028
|
+
"type": [
|
|
1029
|
+
"boolean",
|
|
1030
|
+
"null"
|
|
1031
|
+
],
|
|
1032
|
+
"description": "Has a device opted in to push notifications"
|
|
1026
1033
|
}
|
|
1027
1034
|
},
|
|
1028
1035
|
"required": [
|
|
@@ -1113,6 +1120,13 @@
|
|
|
1113
1120
|
"null"
|
|
1114
1121
|
],
|
|
1115
1122
|
"description": "Personal voting page for this member"
|
|
1123
|
+
},
|
|
1124
|
+
"push_subscribed": {
|
|
1125
|
+
"type": [
|
|
1126
|
+
"boolean",
|
|
1127
|
+
"null"
|
|
1128
|
+
],
|
|
1129
|
+
"description": "Has a device opted in to push notifications"
|
|
1116
1130
|
}
|
|
1117
1131
|
},
|
|
1118
1132
|
"required": [
|
|
@@ -1194,6 +1208,13 @@
|
|
|
1194
1208
|
"null"
|
|
1195
1209
|
],
|
|
1196
1210
|
"description": "Personal voting page for this member"
|
|
1211
|
+
},
|
|
1212
|
+
"push_subscribed": {
|
|
1213
|
+
"type": [
|
|
1214
|
+
"boolean",
|
|
1215
|
+
"null"
|
|
1216
|
+
],
|
|
1217
|
+
"description": "Has a device opted in to push notifications"
|
|
1197
1218
|
}
|
|
1198
1219
|
},
|
|
1199
1220
|
"required": [
|
|
@@ -2502,6 +2523,368 @@
|
|
|
2502
2523
|
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
2503
2524
|
}
|
|
2504
2525
|
},
|
|
2526
|
+
{
|
|
2527
|
+
"name": "create_recipe",
|
|
2528
|
+
"title": "Save a recipe you already have",
|
|
2529
|
+
"description": "Save a recipe to the library from details you already have: one you read in your browser (when a site blocks import_recipe or has no recipe markup), one the owner dictated, or one you wrote. Provide the complete ingredient list with quantities and the steps; include the source page and a real photo URL when you have them. Optionally mark it a favorite.",
|
|
2530
|
+
"inputSchema": {
|
|
2531
|
+
"type": "object",
|
|
2532
|
+
"properties": {
|
|
2533
|
+
"title": {
|
|
2534
|
+
"type": "string",
|
|
2535
|
+
"minLength": 2
|
|
2536
|
+
},
|
|
2537
|
+
"description": {
|
|
2538
|
+
"type": "string"
|
|
2539
|
+
},
|
|
2540
|
+
"image_url": {
|
|
2541
|
+
"type": "string",
|
|
2542
|
+
"description": "A real, publicly reachable photo of the dish; verified by the server and dropped if dead"
|
|
2543
|
+
},
|
|
2544
|
+
"source_url": {
|
|
2545
|
+
"type": "string"
|
|
2546
|
+
},
|
|
2547
|
+
"servings": {
|
|
2548
|
+
"type": "integer"
|
|
2549
|
+
},
|
|
2550
|
+
"ingredients": {
|
|
2551
|
+
"type": "array",
|
|
2552
|
+
"items": {
|
|
2553
|
+
"type": "object",
|
|
2554
|
+
"properties": {
|
|
2555
|
+
"name": {
|
|
2556
|
+
"type": "string",
|
|
2557
|
+
"description": "Plain ingredient name, e.g. 'chicken thighs'"
|
|
2558
|
+
},
|
|
2559
|
+
"quantity": {
|
|
2560
|
+
"type": "string",
|
|
2561
|
+
"description": "Free text, e.g. '2 lbs', '1 bunch'"
|
|
2562
|
+
}
|
|
2563
|
+
},
|
|
2564
|
+
"required": [
|
|
2565
|
+
"name"
|
|
2566
|
+
],
|
|
2567
|
+
"additionalProperties": false
|
|
2568
|
+
},
|
|
2569
|
+
"minItems": 1
|
|
2570
|
+
},
|
|
2571
|
+
"steps": {
|
|
2572
|
+
"type": "array",
|
|
2573
|
+
"items": {
|
|
2574
|
+
"type": "string"
|
|
2575
|
+
},
|
|
2576
|
+
"minItems": 1
|
|
2577
|
+
},
|
|
2578
|
+
"tags": {
|
|
2579
|
+
"type": "array",
|
|
2580
|
+
"items": {
|
|
2581
|
+
"type": "string"
|
|
2582
|
+
}
|
|
2583
|
+
},
|
|
2584
|
+
"favorite": {
|
|
2585
|
+
"type": "boolean"
|
|
2586
|
+
}
|
|
2587
|
+
},
|
|
2588
|
+
"required": [
|
|
2589
|
+
"title",
|
|
2590
|
+
"ingredients",
|
|
2591
|
+
"steps"
|
|
2592
|
+
],
|
|
2593
|
+
"additionalProperties": false,
|
|
2594
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
2595
|
+
},
|
|
2596
|
+
"annotations": {
|
|
2597
|
+
"readOnlyHint": false,
|
|
2598
|
+
"destructiveHint": false,
|
|
2599
|
+
"openWorldHint": false
|
|
2600
|
+
},
|
|
2601
|
+
"execution": {
|
|
2602
|
+
"taskSupport": "forbidden"
|
|
2603
|
+
},
|
|
2604
|
+
"outputSchema": {
|
|
2605
|
+
"type": "object",
|
|
2606
|
+
"properties": {
|
|
2607
|
+
"id": {
|
|
2608
|
+
"type": "string"
|
|
2609
|
+
},
|
|
2610
|
+
"title": {
|
|
2611
|
+
"$ref": "#/properties/id"
|
|
2612
|
+
},
|
|
2613
|
+
"description": {
|
|
2614
|
+
"type": [
|
|
2615
|
+
"string",
|
|
2616
|
+
"null"
|
|
2617
|
+
]
|
|
2618
|
+
},
|
|
2619
|
+
"image_url": {
|
|
2620
|
+
"type": [
|
|
2621
|
+
"string",
|
|
2622
|
+
"null"
|
|
2623
|
+
]
|
|
2624
|
+
},
|
|
2625
|
+
"source_url": {
|
|
2626
|
+
"type": [
|
|
2627
|
+
"string",
|
|
2628
|
+
"null"
|
|
2629
|
+
]
|
|
2630
|
+
},
|
|
2631
|
+
"servings": {
|
|
2632
|
+
"type": [
|
|
2633
|
+
"number",
|
|
2634
|
+
"null"
|
|
2635
|
+
]
|
|
2636
|
+
},
|
|
2637
|
+
"ingredients": {
|
|
2638
|
+
"anyOf": [
|
|
2639
|
+
{
|
|
2640
|
+
"type": "array",
|
|
2641
|
+
"items": {
|
|
2642
|
+
"type": "object",
|
|
2643
|
+
"properties": {
|
|
2644
|
+
"name": {
|
|
2645
|
+
"$ref": "#/properties/id"
|
|
2646
|
+
},
|
|
2647
|
+
"quantity": {
|
|
2648
|
+
"type": [
|
|
2649
|
+
"string",
|
|
2650
|
+
"null"
|
|
2651
|
+
],
|
|
2652
|
+
"description": "Free text, e.g. '2 lbs'"
|
|
2653
|
+
}
|
|
2654
|
+
},
|
|
2655
|
+
"required": [
|
|
2656
|
+
"name"
|
|
2657
|
+
],
|
|
2658
|
+
"additionalProperties": true
|
|
2659
|
+
}
|
|
2660
|
+
},
|
|
2661
|
+
{
|
|
2662
|
+
"type": "null"
|
|
2663
|
+
}
|
|
2664
|
+
]
|
|
2665
|
+
},
|
|
2666
|
+
"steps": {
|
|
2667
|
+
"anyOf": [
|
|
2668
|
+
{
|
|
2669
|
+
"type": "array",
|
|
2670
|
+
"items": {
|
|
2671
|
+
"$ref": "#/properties/id"
|
|
2672
|
+
}
|
|
2673
|
+
},
|
|
2674
|
+
{
|
|
2675
|
+
"type": "null"
|
|
2676
|
+
}
|
|
2677
|
+
]
|
|
2678
|
+
},
|
|
2679
|
+
"tags": {
|
|
2680
|
+
"anyOf": [
|
|
2681
|
+
{
|
|
2682
|
+
"type": "array",
|
|
2683
|
+
"items": {
|
|
2684
|
+
"$ref": "#/properties/id"
|
|
2685
|
+
}
|
|
2686
|
+
},
|
|
2687
|
+
{
|
|
2688
|
+
"type": "null"
|
|
2689
|
+
}
|
|
2690
|
+
]
|
|
2691
|
+
},
|
|
2692
|
+
"is_favorite": {
|
|
2693
|
+
"type": [
|
|
2694
|
+
"boolean",
|
|
2695
|
+
"null"
|
|
2696
|
+
]
|
|
2697
|
+
},
|
|
2698
|
+
"created_at": {
|
|
2699
|
+
"type": [
|
|
2700
|
+
"string",
|
|
2701
|
+
"null"
|
|
2702
|
+
]
|
|
2703
|
+
},
|
|
2704
|
+
"url": {
|
|
2705
|
+
"$ref": "#/properties/id"
|
|
2706
|
+
}
|
|
2707
|
+
},
|
|
2708
|
+
"required": [
|
|
2709
|
+
"id",
|
|
2710
|
+
"title",
|
|
2711
|
+
"url"
|
|
2712
|
+
],
|
|
2713
|
+
"additionalProperties": true,
|
|
2714
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
2715
|
+
}
|
|
2716
|
+
},
|
|
2717
|
+
{
|
|
2718
|
+
"name": "set_recipe_image",
|
|
2719
|
+
"title": "Attach a photo to a recipe",
|
|
2720
|
+
"description": "Store a photo for a recipe permanently and set it as the recipe's image. Use for images you generated with your image tool (their URLs expire) or any photo you have as a URL or base64. Pass either image_url (we fetch and copy it) or image_base64 + content_type. Max 6 MB; JPEG, PNG, WebP or GIF.",
|
|
2721
|
+
"inputSchema": {
|
|
2722
|
+
"type": "object",
|
|
2723
|
+
"properties": {
|
|
2724
|
+
"recipe_id": {
|
|
2725
|
+
"type": "string"
|
|
2726
|
+
},
|
|
2727
|
+
"image_url": {
|
|
2728
|
+
"type": "string",
|
|
2729
|
+
"format": "uri"
|
|
2730
|
+
},
|
|
2731
|
+
"image_base64": {
|
|
2732
|
+
"type": "string",
|
|
2733
|
+
"description": "Raw base64 (no data: prefix)"
|
|
2734
|
+
},
|
|
2735
|
+
"content_type": {
|
|
2736
|
+
"type": "string",
|
|
2737
|
+
"description": "e.g. image/png"
|
|
2738
|
+
}
|
|
2739
|
+
},
|
|
2740
|
+
"required": [
|
|
2741
|
+
"recipe_id"
|
|
2742
|
+
],
|
|
2743
|
+
"additionalProperties": false,
|
|
2744
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
2745
|
+
},
|
|
2746
|
+
"annotations": {
|
|
2747
|
+
"readOnlyHint": false,
|
|
2748
|
+
"destructiveHint": false,
|
|
2749
|
+
"openWorldHint": false
|
|
2750
|
+
},
|
|
2751
|
+
"execution": {
|
|
2752
|
+
"taskSupport": "forbidden"
|
|
2753
|
+
},
|
|
2754
|
+
"outputSchema": {
|
|
2755
|
+
"type": "object",
|
|
2756
|
+
"properties": {
|
|
2757
|
+
"recipe_id": {
|
|
2758
|
+
"type": "string"
|
|
2759
|
+
},
|
|
2760
|
+
"image_url": {
|
|
2761
|
+
"type": "string",
|
|
2762
|
+
"description": "Permanent public URL of the stored photo"
|
|
2763
|
+
}
|
|
2764
|
+
},
|
|
2765
|
+
"required": [
|
|
2766
|
+
"recipe_id",
|
|
2767
|
+
"image_url"
|
|
2768
|
+
],
|
|
2769
|
+
"additionalProperties": true,
|
|
2770
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
2771
|
+
}
|
|
2772
|
+
},
|
|
2773
|
+
{
|
|
2774
|
+
"name": "import_recipes",
|
|
2775
|
+
"title": "Import several recipes from URLs",
|
|
2776
|
+
"description": "Bulk version of import_recipe: fetch up to 15 recipe pages and save them to the library, optionally marking each as a favorite. Use when the owner is moving favorites from another app (Mealime, a meal kit, a recipe manager). Names without URLs are your job: search for a real recipe page first, then pass the URLs here. Per-URL failures are reported, not thrown.",
|
|
2777
|
+
"inputSchema": {
|
|
2778
|
+
"type": "object",
|
|
2779
|
+
"properties": {
|
|
2780
|
+
"items": {
|
|
2781
|
+
"type": "array",
|
|
2782
|
+
"items": {
|
|
2783
|
+
"type": "object",
|
|
2784
|
+
"properties": {
|
|
2785
|
+
"url": {
|
|
2786
|
+
"type": "string",
|
|
2787
|
+
"format": "uri"
|
|
2788
|
+
},
|
|
2789
|
+
"favorite": {
|
|
2790
|
+
"type": "boolean"
|
|
2791
|
+
},
|
|
2792
|
+
"tags": {
|
|
2793
|
+
"type": "array",
|
|
2794
|
+
"items": {
|
|
2795
|
+
"type": "string"
|
|
2796
|
+
}
|
|
2797
|
+
}
|
|
2798
|
+
},
|
|
2799
|
+
"required": [
|
|
2800
|
+
"url"
|
|
2801
|
+
],
|
|
2802
|
+
"additionalProperties": false
|
|
2803
|
+
},
|
|
2804
|
+
"minItems": 1,
|
|
2805
|
+
"maxItems": 15
|
|
2806
|
+
},
|
|
2807
|
+
"favorite_all": {
|
|
2808
|
+
"type": "boolean",
|
|
2809
|
+
"description": "Mark every imported recipe as a favorite"
|
|
2810
|
+
}
|
|
2811
|
+
},
|
|
2812
|
+
"required": [
|
|
2813
|
+
"items"
|
|
2814
|
+
],
|
|
2815
|
+
"additionalProperties": false,
|
|
2816
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
2817
|
+
},
|
|
2818
|
+
"annotations": {
|
|
2819
|
+
"readOnlyHint": false,
|
|
2820
|
+
"destructiveHint": false,
|
|
2821
|
+
"openWorldHint": true
|
|
2822
|
+
},
|
|
2823
|
+
"execution": {
|
|
2824
|
+
"taskSupport": "forbidden"
|
|
2825
|
+
},
|
|
2826
|
+
"outputSchema": {
|
|
2827
|
+
"type": "object",
|
|
2828
|
+
"properties": {
|
|
2829
|
+
"imported": {
|
|
2830
|
+
"type": "array",
|
|
2831
|
+
"items": {
|
|
2832
|
+
"type": "object",
|
|
2833
|
+
"properties": {
|
|
2834
|
+
"recipe_id": {
|
|
2835
|
+
"type": "string"
|
|
2836
|
+
},
|
|
2837
|
+
"title": {
|
|
2838
|
+
"$ref": "#/properties/imported/items/properties/recipe_id"
|
|
2839
|
+
},
|
|
2840
|
+
"url": {
|
|
2841
|
+
"$ref": "#/properties/imported/items/properties/recipe_id"
|
|
2842
|
+
},
|
|
2843
|
+
"favorite": {
|
|
2844
|
+
"type": "boolean"
|
|
2845
|
+
},
|
|
2846
|
+
"ingredients": {
|
|
2847
|
+
"type": "number"
|
|
2848
|
+
}
|
|
2849
|
+
},
|
|
2850
|
+
"required": [
|
|
2851
|
+
"recipe_id",
|
|
2852
|
+
"title",
|
|
2853
|
+
"url",
|
|
2854
|
+
"favorite",
|
|
2855
|
+
"ingredients"
|
|
2856
|
+
],
|
|
2857
|
+
"additionalProperties": true
|
|
2858
|
+
}
|
|
2859
|
+
},
|
|
2860
|
+
"failed": {
|
|
2861
|
+
"type": "array",
|
|
2862
|
+
"items": {
|
|
2863
|
+
"type": "object",
|
|
2864
|
+
"properties": {
|
|
2865
|
+
"url": {
|
|
2866
|
+
"$ref": "#/properties/imported/items/properties/recipe_id"
|
|
2867
|
+
},
|
|
2868
|
+
"error": {
|
|
2869
|
+
"$ref": "#/properties/imported/items/properties/recipe_id"
|
|
2870
|
+
}
|
|
2871
|
+
},
|
|
2872
|
+
"required": [
|
|
2873
|
+
"url",
|
|
2874
|
+
"error"
|
|
2875
|
+
],
|
|
2876
|
+
"additionalProperties": true
|
|
2877
|
+
}
|
|
2878
|
+
}
|
|
2879
|
+
},
|
|
2880
|
+
"required": [
|
|
2881
|
+
"imported",
|
|
2882
|
+
"failed"
|
|
2883
|
+
],
|
|
2884
|
+
"additionalProperties": true,
|
|
2885
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
2886
|
+
}
|
|
2887
|
+
},
|
|
2505
2888
|
{
|
|
2506
2889
|
"name": "get_past_recipes",
|
|
2507
2890
|
"title": "Get past recipes",
|
|
@@ -3159,7 +3542,7 @@
|
|
|
3159
3542
|
},
|
|
3160
3543
|
"image_url": {
|
|
3161
3544
|
"type": "string",
|
|
3162
|
-
"description": "A real, publicly reachable photo of the dish: the og:image of the recipe page you used, or one found via web/image search. The server verifies the URL is an image and drops it otherwise. Never invent URLs; prefer import_recipe, which captures the source photo."
|
|
3545
|
+
"description": "A real, publicly reachable photo of the dish: the og:image of the recipe page you used, or one found via web/image search. The server verifies the URL is an image and drops it otherwise. Never invent URLs; prefer import_recipe, which captures the source photo. For generated images use set_recipe_image afterwards."
|
|
3163
3546
|
},
|
|
3164
3547
|
"source_url": {
|
|
3165
3548
|
"type": "string"
|
|
@@ -3503,7 +3886,7 @@
|
|
|
3503
3886
|
},
|
|
3504
3887
|
"image_url": {
|
|
3505
3888
|
"type": "string",
|
|
3506
|
-
"description": "A real, publicly reachable photo of the dish: the og:image of the recipe page you used, or one found via web/image search. The server verifies the URL is an image and drops it otherwise. Never invent URLs; prefer import_recipe, which captures the source photo."
|
|
3889
|
+
"description": "A real, publicly reachable photo of the dish: the og:image of the recipe page you used, or one found via web/image search. The server verifies the URL is an image and drops it otherwise. Never invent URLs; prefer import_recipe, which captures the source photo. For generated images use set_recipe_image afterwards."
|
|
3507
3890
|
},
|
|
3508
3891
|
"source_url": {
|
|
3509
3892
|
"type": "string"
|
|
@@ -3960,7 +4343,7 @@
|
|
|
3960
4343
|
{
|
|
3961
4344
|
"name": "message_group",
|
|
3962
4345
|
"title": "Message the household",
|
|
3963
|
-
"description": "Send SMS/MMS or email to household members. '{vote_link}' in the message becomes each member's personal voting link. Channel 'auto' texts members with a phone and emails the rest. Providers now: {\"sms\":\"dry-run\",\"email\":\"dry-run\"} (dry-run = logged only).",
|
|
4346
|
+
"description": "Send a push notification, SMS/MMS or email to household members. '{vote_link}' in the message becomes each member's personal voting link. Channel 'auto' texts members with a phone and emails the rest. Providers now: {\"sms\":\"dry-run\",\"email\":\"dry-run\",\"push\":\"web-push\"} (dry-run = logged only).",
|
|
3964
4347
|
"inputSchema": {
|
|
3965
4348
|
"type": "object",
|
|
3966
4349
|
"properties": {
|
|
@@ -3972,9 +4355,11 @@
|
|
|
3972
4355
|
"enum": [
|
|
3973
4356
|
"sms",
|
|
3974
4357
|
"email",
|
|
4358
|
+
"push",
|
|
3975
4359
|
"auto"
|
|
3976
4360
|
],
|
|
3977
|
-
"default": "auto"
|
|
4361
|
+
"default": "auto",
|
|
4362
|
+
"description": "auto = push to members who opted in on their vote page, else text if they have a phone, else email"
|
|
3978
4363
|
},
|
|
3979
4364
|
"subject": {
|
|
3980
4365
|
"type": "string"
|
|
@@ -4031,6 +4416,12 @@
|
|
|
4031
4416
|
},
|
|
4032
4417
|
"email": {
|
|
4033
4418
|
"$ref": "#/properties/providers/properties/sms"
|
|
4419
|
+
},
|
|
4420
|
+
"push": {
|
|
4421
|
+
"type": [
|
|
4422
|
+
"string",
|
|
4423
|
+
"null"
|
|
4424
|
+
]
|
|
4034
4425
|
}
|
|
4035
4426
|
},
|
|
4036
4427
|
"required": [
|
|
@@ -4052,6 +4443,7 @@
|
|
|
4052
4443
|
"enum": [
|
|
4053
4444
|
"sms",
|
|
4054
4445
|
"email",
|
|
4446
|
+
"push",
|
|
4055
4447
|
"none"
|
|
4056
4448
|
]
|
|
4057
4449
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-chef-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "Family meal planning run by your own AI agent: weekly dinners, household votes, grocery list minus the pantry. Stdio MCP server for the hosted Agent Chef service (https://agentchef.net/mcp).",
|
|
5
5
|
"homepage": "https://agentchef.net",
|
|
6
6
|
"repository": {
|