Extend x402 actual-cost settlement beyond getStyleProfile to every
Twitter-capable tool (findSimilarUsers, getEngagementMetrics,
getPostingPatterns, getTopicModeling, getSentimentTrends,
getEngagementDrivers). Each carries a twitterPostCount (or source
platform + post count) in its response so settlement passes on the
realized Twitter API lookup and per-post costs.
- tools: payableDef uses UsesTwitter + TwitterPostCap instead of a
fixed Scheme; registerTools advertises upto at the cap-derived
maximum when Twitter is enabled, otherwise exact at the flat base
price.
- x402: export pricing constants and MaxTwitterCostMicro /
FormatPriceMicro / MicroFromPriceString helpers; add
AddPayableToolWithResolver and a per-tool settleResolvers map used
by both the MCP wrapper and REST override; buildSchemeConfigs
registers only the schemes declared in a tool's requirements.
- analytics: default aggregates include Twitter only when enabled;
result count recorded before caching and returned as twitterPostCount.
- server/twitterEnabled gates the upto switch (config bearer token).
Analytics review fixes:
- Store Twitter analytics coverage as discrete intervals instead of a single
contiguous window so disjoint fetch ranges no longer mask inner gaps as
covered (fetch per uncovered range, add gap regression tests)
- Compute real AvgEngagement/Correlation in getEngagementDrivers instead of
all-zero placeholders
- Make parseAnalyticsTimeRange surface invalid timestamps, cap merged analytics
posts at limit, and normalize sentiment by timestamped posts only
- gofmt: fix misalignment in config.go and types.go
- Include Twitter in the default aggregate analytics scope; its API costs are
passed to the caller through paid tool pricing
x402 cost passing:
- computeTwitterStyleProfileCost now charges base cost ($0.10) + user lookup
($0.01) + $0.005 per Twitter post, guaranteeing the charge always clears the
underlying API cost (never break-even or loss)
- Return a $-prefixed dollar string for the settlement override, fixing the
previously off-by-factor-100 raw-atomic-unit amount
- Raise getStyleProfile base registration to $0.36 to authorize the max Twitter
charge
- Add tests for the cost formula, profitable floor, and dollar formatting
Register five payable analytics MCP tools (engagement metrics, posting
patterns, topic modeling, sentiment trends, engagement drivers).
- Thread real post timestamps and engagement metrics through the compute
functions instead of time.Now()/zero placeholders (enabled by the
enriched clustering.Item).
- Report the requested author (args.Author) instead of a literal string.
- Implement sentiment shift detection (from/to/magnitude) ordered by time.
- Cache analytics results keyed by scope: a single "all" key for
cross-platform aggregates and per-platform keys for single-platform
queries, so aggregate results are not mixed with partial data.
- Use configurable per-tool cache TTLs stored on the Server.
Also cache Twitter post data permanently to avoid repeat paid API calls:
newly fetched posts are persisted, and a coverage watermark (analytics
coverage table) ensures the paid Twitter API is only called for time
ranges not already retrieved.