{"name":"nichify","version":"0.2.0","protocolVersion":"2025-06-18","endpoint":"http://nichify.app/mcp","transport":"streamable-http","auth":{"type":"bearer","scheme":"nch_","issuance_url":"http://nichify.app/account/keys"},"capabilities":{"tools":true,"resources":true,"mcp_apps":{"enabled":true,"ui_resource_prefixes":["ui://nichify/analyses","ui://nichify/analysis/","ui://nichify/monitorings"],"renderable_tools":["get_analysis","list_analyses","list_monitorings"],"spec":"@modelcontextprotocol/ext-apps draft"}},"tools_preview":[{"name":"export_analysis_csv","title":"Export analysis CSV","description":"Export every listing of an analysis as a UTF-8 CSV encoded as base64. Inline cap is 5 MB; larger exports require a web session download link. CSV columns: item_id, title, brand, price_eur, total_price_eur, condition, size, like_count, listing_status, url. Errors: not_found, forbidden."},{"name":"export_monitor_csv","title":"Export monitor CSV","description":"Return a base64-encoded CSV export of closure events for a monitor. Columns: listing_id, vinted_id, url, title, brand, size, condition, price_eur, currency, kind, detected_at, closed_at."},{"name":"find_near_miss_niches","title":"Find near-miss niches","description":"Return niches that failed the caller's ranking thresholds by a small gap, with per-reason breakdowns. Sorted by fewest rejection reasons, then smallest gap_ratio. When to use: surface niches worth reconsidering after tuning thresholds (e.g. borderline demand or coherence). When NOT to use: retrieving the final ranked list (use get_dashboard top_niches or get_run.top_niches). No side effects. Errors: not_found (unknown or cross-workspace run_id), validation_failed for missing/invalid thresholds."},{"name":"get_analysis","title":"Get analysis","description":"Return a single analysis with metadata, top 10 items, and applied filters. When to use: the agent needs aggregate metrics or top items for a specific analysis. When NOT to use: fetching every raw listing (use export_analysis_csv). Errors: not_found (unknown id), forbidden (id belongs to another user).","ui":{"resourceUri":"ui://nichify/analysis/{id}"}},{"name":"get_closure_events","title":"Get closure events","description":"Return closure events (sold/reserved/deleted) for a monitor, optionally filtered by since_utc (ISO 8601). Closure events are detected by a periodic revisit job. Use get_monitoring.outbound_coverage.age_seconds to know the current staleness window before treating the list as exhaustive."},{"name":"get_dashboard","title":"Get dashboard summary","description":"Return the caller's workspace dashboard: metric cards, pipeline stages, top niches, near-miss candidates, and recent runs. When to use: a single call to see overall account health and the currently-ranked opportunities. When NOT to use: per-run diagnostics (use get_run / get_run_log) or paging through all analyses (use list_analyses). No side effects. Errors: forbidden (no workspace), validation_failed."},{"name":"get_filtered_analysis","title":"Get filtered analysis","description":"Re-aggregate an existing analysis after applying listing-level filters (price range, conditions, brands, categories, keyword subsets). Returns the same shape as get_analysis (KPIs, distributions, strategic matrix) but computed over the filtered subset. When to use: the agent wants to see how KPIs shift when scoped to a price band or brand. When NOT to use: exporting every raw row (use export_analysis_csv) or inspecting unfiltered metrics (use get_analysis). Errors: not_found, forbidden, validation_failed for malformed price/array inputs."},{"name":"get_monitor_trends","title":"Get monitor trends","description":"Return inflow/outflow trend buckets for a monitor over window_hours (default 168, max 2160) bucketed by bucket_hours (default 6, max 168). Closure events are detected by a periodic revisit job. Use get_monitoring.outbound_coverage.age_seconds to know the current staleness window before treating the list as exhaustive."},{"name":"get_monitoring","title":"Get monitoring","description":"Return a single monitoring with totals and outbound_coverage. Closure events are detected by a periodic revisit job. Use get_monitoring.outbound_coverage.age_seconds to know the current staleness window before treating the list as exhaustive."},{"name":"get_run","title":"Get run","description":"Return one run descriptor (status, progress, timing, labels) for the caller's workspace. When to use: the agent already knows the run_id and wants current status. When NOT to use: browsing multiple runs (use list_runs). Errors: not_found (unknown or cross-workspace id)."},{"name":"get_run_log","title":"Get run log","description":"Return the last N stdout lines of a run's pipeline log. Default tail is 160, hard cap is 2000. When to use: diagnosing a failed or stalled run. When NOT to use: streaming live output (not supported over MCP; poll get_run for status changes). Errors: not_found, validation_failed for out-of-range tail_lines."},{"name":"list_analyses","title":"List analyses","description":"Return the authenticated user's niche analyses, newest first, with cursor pagination. When to use: the agent needs a catalog of past analyses to pick one for deeper inspection. When NOT to use: fetching a single analysis by id (use get_analysis). Example: {limit: 20, cursor: null, status: null}. Errors: validation_failed for invalid cursor or out-of-range limit.","ui":{"resourceUri":"ui://nichify/analyses"}},{"name":"list_monitored_listings","title":"List monitored listings","description":"Return tracked Vinted listings for one monitor including captured metadata (title, brand, size, condition, price_eur, currency, image_url, color, favourites_count) plus last_seen_at, first_seen_at, closure_status, closed_at, and listing_status. Cursor-paginated. Optional status_filter narrows by active/sold/reserved/deleted."},{"name":"list_monitorings","title":"List monitorings","description":"Return the user's Vinted monitorings with outbound_coverage per monitor. Newest first, cursor-paginated. Closure events are detected by a periodic revisit job. Use get_monitoring.outbound_coverage.age_seconds to know the current staleness window before treating the list as exhaustive.","ui":{"resourceUri":"ui://nichify/monitorings"}},{"name":"list_run_alerts","title":"List run alerts","description":"Return the classified alerts (warnings + errors) extracted from a run's pipeline log, deduplicated and cursor-paginated. When to use: summarising what went wrong on a failed run without reading the full log. When NOT to use: streaming the live log (use get_run_log). Errors: not_found (unknown or cross-workspace run_id), validation_failed for bad limit/cursor."},{"name":"list_runs","title":"List runs","description":"Return the authenticated caller's pipeline runs, newest first, scoped to their workspace. When to use: the agent needs to pick a run to inspect status, progress, or logs. When NOT to use: fetching a single run by id (use get_run). No side effects. Errors: forbidden (no workspace)."},{"name":"proxy_pool_status","title":"Proxy pool status","description":"Return a snapshot of the scraper proxy pool: total proxies, how many are currently available, in use, or rate-limited, plus a breakdown of in_use entries by job kind (monitor / analysis / revisit / legacy). Use to diagnose 'Aucun proxy disponible' incidents. Admin-only."},{"name":"whoami","title":"Who am I","description":"Return the authenticated caller's email, plan, active PAT prefix, and scopes. Use when verifying end-to-end connectivity or when you need to confirm which Nichify account the PAT is bound to. No side effects. Never returns secrets."}],"documentation":"http://nichify.app/llms-full.txt","agent_instructions":"http://nichify.app/agent-instructions.md","server_card":"http://nichify.app/.well-known/mcp.json"}