Commit 233256c
feat(dappier): AI-optimized Dappier components for MCP (PipedreamHQ#21826)
* feat(dappier): AI-optimized Dappier action set for MCP (real-time search, recommendations, analytics)
Initial AI-optimized Dappier components for the MCP tool surface, covering
issue PipedreamHQ#21660 (real-time web search, AI content recommendations, data-model
querying) plus the four Analytics API endpoints. Iterated against the MCP
eval suite (evals/dappier) — 9/10 green on Sonnet 5 (trials: 1); the one
failure is an upstream HTTP 500 on POST /app/v2/search, not a component
defect. agent-audit: 100/100.
- search-real-time-data (new, 0.0.1): real-time web/data search via a Dappier
AI model (am_ id); returns a synthesized answer. Eval #9 passes.
- get-ai-recommendations (new, 0.0.1): AI-ranked content recommendations for a
data model (dm_ id); optional additive `fields` projection trims large
article payloads. Eval #10 blocked by an upstream 500 (server-side).
- get-ask-ai-analytics (new, 0.0.1): aggregate Ask AI widget analytics. Evals #1/#4/#5 pass.
- get-ask-ai-logs (new, 0.0.1): raw Ask AI conversation logs with page/limit
pagination + paging guidance. Evals #2/#6 pass.
- get-sponsored-conversations-analytics (new, 0.0.1): sponsored-conversation
(ad campaign) analytics. Eval #7 passes.
- get-session-intelligence (new, 0.0.1): session intent/topic breakdowns. Evals #3/#8 pass.
- dappier.app.mjs: shared analytics prop definitions + GET request methods.
- common/utils.mjs: validateDateRange (365-day cap) + pluckFields projection helper.
- common/constants.mjs: analytics interaction types, range + page-size bounds.
App package.json bumped 0.0.1 -> 0.1.0 (minor -- new actions).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(dappier): add trailing newline to package.json (eol-last)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(dappier): address review — numArticlesRef max, own-prop projection, date default wording
- get-ai-recommendations: numArticlesRef description said max 1000 but schema is max 100; corrected the doc.
- common/utils.mjs: pluckFields now uses Object.hasOwn so a requested field name that collides with an inherited prop (e.g. toString) is not copied; own result fields still are.
- dappier.app.mjs: reworded startDate default from the brittle/off-by-one '7 days before today' to 'the last 7 days (UTC), i.e. today and the six prior days', matching observed API behavior.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(dappier): resolve one-sided analytics date windows before sending
Verified against the live API: omitting either start_date or end_date makes
Dappier reset BOTH bounds to its default trailing-7-day window, silently
discarding the bound the caller supplied — so a one-sided range returned the
wrong period. resolveDateRange() now fills the missing bound (missing end ->
today UTC; missing start -> 6 days before the end) and always sends both, so a
supplied bound is honored; both-omitted still defers to the API default. All
four analytics actions use it; start/end prop docs updated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(dappier): match analytics date-range cap to the API (inclusive days)
Probed the live API: it accepts a 364-day start/end difference (365 inclusive
days) and returns 400 at a 365-day difference (366 inclusive days).
validateDateRange used '> 365 days difference', so a 365-day-difference window
slipped past the fail-fast and hit a raw API 400. Now counts inclusive days
(difference + 1) and caps at 365, matching the API exactly.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs(dappier): note session_intelligence wrapper in get-session-intelligence description
The API nests all six breakdowns under a single top-level `session_intelligence`
object (verified live). The description listed them as if they were root keys,
so an agent would look for them at the root and miss the `session_intelligence.`
prefix. Description-only; no behavior change.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs(dappier): use camelCase widgetId in session-intelligence example
The example told the agent to pass `widget_id`, but the input prop is
`widgetId` (run() maps it to the `widget_id` query param). Match the example
to the prop the agent actually sets. Description-only.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs(dappier): use camelCase prop names in remaining action examples
Same fix as get-session-intelligence, applied to the sibling descriptions:
the agent-facing 'Example:' hints used API param names (start_date, end_date,
campaign_id, data_model_id) instead of the camelCase input props (startDate,
endDate, campaignId, dataModelId). API-mapping mentions stay snake_case.
Description-only; no behavior change.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs(dappier): camelCase input-guidance for model-id props
The 'Provide a ...' input guidance used API param names — get-ai-recommendations
said 'Provide a data_model_id' (prop is dataModelId) and search-real-time-data
said 'Provide an ai_model_id' (prop is aiModelId). Use the camelCase input keys;
snake_case is retained only where describing the API request mapping
(query param / path template). Description-only.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Adding missing dependencies field
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: GTFalcao <gtfalcao96@gmail.com>1 parent 40f87e4 commit 233256c
11 files changed
Lines changed: 743 additions & 9 deletions
File tree
- components/dappier
- actions
- get-ai-recommendations
- get-ask-ai-analytics
- get-ask-ai-logs
- get-session-intelligence
- get-sponsored-conversations-analytics
- search-real-time-data
- common
Lines changed: 105 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
Lines changed: 83 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
Lines changed: 95 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
Lines changed: 83 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
0 commit comments