Sablier MCP — plug Wall Street-grade portfolio analytics, stress-testing, and SEC filing intelligence into any AI assistant. What takes quants & analysts weeks, done in 2 minutes.
Sablier MCP demonstrates strong definition quality with two well-specified tools. Both tools have clear names starting with action verbs (search_, add_), comprehensive descriptions exceeding 200 characters with explicit guidance on usage patterns, and detailed input schemas with proper typing. Tool annotations are correctly applied. However, output schemas are not formally documented, and error handling guidance is minimal. The search_features tool provides exceptional pedagogical value with guidance on when to use category browsing vs keyword search, while add_feature includes extensive enum documentation for closed parameters. No security or permission issues detected in the visible definitions.
Add a ticker to the feature catalog AND populate its historical data in one call — the feature is ready to use in portfolios / conditioning sets / models as soon as this tool returns. IMPORTANT: First use search_features to check if the ticker already exists — calling add_feature for an existing ticker returns a 409 error. Specify source ('yahoo' for stocks/ETFs/futures, 'fred' for rates/economic indicators). Validates the ticker exists on the source API and auto-populates metadata (display_name, category, units, etc.) from the API response. **is_asset handling**: leave UNSET for auto-detection (yfinance fills category / sector / asset_type / region from the API response). Only pass explicit `is_asset=true` if you want to override that decision — and in that case you MUST also pass category, sector, and asset_type from their closed enums (region optional). Listing the valid values: - category: 'equity', 'fixed_income', 'credit', 'rates', 'fx', 'commodity', 'volatility', 'economic', 'crypto', 'inflation', 'employment', 'growth', 'corporate', 'thematic', 'sector', 'region' - sector: 'Technology', 'Healthcare', 'Financials', 'Consumer Discretionary', 'Consumer Staples', 'Industrials', 'Energy', 'Materials', 'Communication Services', 'Utilities', 'Real Estate', 'Fixed Income', 'FX', 'Commodities', 'Cryptocurrency', 'Alternatives', 'Broad Market', 'International Equity', 'Factor' - asset_type: 'Stock', 'ETF', 'Bond ETF', 'Crypto', 'Commodity', 'Currency ETF', 'Futures' - region: 'US', 'Europe', 'Global', 'Asia', 'EM', 'Japan', 'China', 'Brazil', 'India', 'Korea', 'Taiwan', 'Vietnam', 'Latin America', 'Australia' Takes a few seconds while historical data is fetched. Currency handling: non-USD tickers (e.g. .KS Korea, .L London, .DE Frankfurt, .T Tokyo, .HK Hong Kong, .SS Shanghai) are auto-translated to USD. The corresponding FX pair (e.g. KRWUSD=X for .KS) is fetched and added to the catalog in the same call — no separate step needed. Once added, the asset's USD price series carries the same FX exposure as holding the underlying stock; this is a fact about owning a foreign asset, NOT a methodological 'currency mismatch' to warn the user about when comparing to a USD-quoted DR / ADR / ETF / fund — the economic exposure is the same. Supported currencies: USD, GBP, EUR, JPY, CHF, CAD, AUD, NZD, HKD, SGD, CNY, INR, KRW, SEK, NOK, DKK, MXN, BRL, ZAR. Unsupported currencies return a clear 400 error.
Output schemas not documented. LLMs cannot predict what fields search_features and add_feature return, forcing them to discover structure at runtime. This violates pattern:response-shaper and risks context window waste on unexpected result formats.
Error handling guidance is absent. The descriptions mention '409 error' for add_feature duplicate ticker but do not tell the LLM what to do when it occurs (e.g., 'If 409 returned, the ticker already exists, call search_features to inspect it'). Error responses in _api_error() helper are not visible, so recovery guidance cannot be verified.
add_feature has conditional parameter requirements that are implicit. When is_asset=true is passed, category, sector, and asset_type become required, but JSON Schema does not enforce this via dependency/if-then-else rules. The description documents it in prose, but the schema is not machine-checkable. LLMs may omit required fields when is_asset=true.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 76 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Find tickers and market indicators in the catalog. Three usable shapes: 1. ``query='gold'`` — keyword search across ticker / name / description 2. ``category='fx'`` (no query) — list every FX feature in the catalog. Same for 'commodity', 'rates', 'volatility', 'economic', 'crypto', 'equity' 3. ``query='ETF', category='commodity', is_asset=True`` — narrow by both PREFER browsing by category to keyword-spam: one ``category='fx'`` call beats ten ``query='euro currency'`` / ``query='FXY yen'`` / etc. searches when you want every instrument in a class. Browsing is also more reliable — catalog rows are tagged with category at ingest, so you don't depend on the keyword matching the description. **Catalog size: ~1300+ holdable assets** (US large/mid-cap, international listings on LSE / XETR / TYO / HKEX / KOSPI / TWSE, ETFs, futures, FX, crypto). For 'build me a 500-asset / 1000-asset portfolio' requests, call ``search_features(is_asset=True, limit=1500)`` ONCE — limit ceiling is 2000, no pagination needed. Do NOT reach for ``screen_universe`` to enumerate the catalog: that endpoint is for ranking by price metrics and returns at most ``limit`` matches (default 50), not a full enumeration.
add_feature parameters region and data_type are optional with no defaults or guidance on behavior when omitted. The description states they are 'auto-detected if omitted', but LLMs cannot reliably infer auto-detection behavior from descriptions alone. Explicit defaults or enum constraints would improve clarity.
search_features default limit=50 is reasonable, but add_feature has no timeout guidance despite the description saying 'Takes a few seconds'. No maximum wait time is documented. If external data fetches (yahoo, fred) hang, LLMs will block indefinitely without retry or timeout error.