Boolsai Signals
Quant-research MCP — tradeable signals from public-company website stack changes. 7 tools.
Executive verdict
Current trust snapshot
trustsnap_66c8a283fe3b40c7Own this MCP?
Claim ownership, prove control with a GitHub, DNS, or HTTP token challenge, revalidate now, publish a badge, and configure monitoring.
POST /v1/servers/ai.boolsai/signals/revalidateBadge embed
[](https://verify.sentinelsignal.io/servers/ai.boolsai/signals)
MCP TrustOps
TrustOps turns this report into operational controls: freshness SLAs, authenticated validation, semantic benchmarks, policy exports, alert subscriptions, badges, cost/compliance metadata, and runtime routing. Fresh trusted index decisions stay separate from long-tail inventory so stale scores do not masquerade as current evidence.
/v1/decideAlert subscription types
MCP Runtime hosting
Verify Hosted MCP turns a trusted server report into a managed remote MCP endpoint with GitHub deployment provenance, sandbox policy, encrypted secrets, release history, rollback, and audit/usage events.
/hosted/{namespace}/{name}/mcp| Deployment | Status | Endpoint | Release |
|---|---|---|---|
| No hosted runtime deployments yet. | |||
Production readiness class
Evidence confidence
Recommended for
Client compatibility verdicts
Client compatibility only means the server shape can work with a client. Production trust decision and write-action publishing are evaluated separately so a client-compatible server can still be blocked for production.
Evidence provenance
initialize• OKtools_list• OKtransport_compliance_probe• Errorstep_up_auth_probe• Missingconnector_replay_probe• OK — Frozen tool snapshots must survive refresh.request_association_probe• Missing — Roots, sampling, and elicitation should stay request-scoped.
Evidence provenance
initialize• OKtools_list• OKtransport_compliance_probe• Error
Evidence provenance
action_safety_probe• Error
Evidence provenance
tool_snapshot_probe• OKconnector_replay_probe• OK
Why compatibility is limited by client
Remediation checklist
OpenAI connectors expect OAuth for remote server auth.Dynamic client registration materially improves connector setup.Transport compliance should be in good shape.search fetch only is not yet satisfiedoauth configured is not yet satisfiedadmin refresh required is not yet satisfied
Remediation checklist
Transport behavior should match Claude-compatible HTTP expectations.search fetch only is not yet satisfiedoauth configured is not yet satisfiedadmin refresh required is not yet satisfiedsafe for company knowledge is not yet satisfiedsafe for messages api remote mcp is not yet satisfied
Remediation checklist
Add a clearer auth boundary around risky write actions.Add confirmation or dry-run semantics for risky actions.Constrain or sandbox exec-capable tools before publishing broadly.
Verdict traces
- No active alert triggers.
Client verdict trace table
| Verdict | Status | Checks | Winning source | Conflicts |
|---|---|---|---|---|
openai_connectors |
Partially client-compatible | initialize, tools_list, transport_compliance_probe, step_up_auth_probe, connector_replay_probe, request_association_probe | live_validation | none |
claude_desktop |
Client-compatible | initialize, tools_list, transport_compliance_probe | live_validation | none |
unsafe_for_write_actions |
Publishing blocked | action_safety_probe | live_validation | none |
snapshot_churn_risk |
Low | tool_snapshot_probe, connector_replay_probe | history | none |
Publishability policy profiles
- Search Fetch Only: No
- Write Actions Present: Yes
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
- Search Fetch Only: No
- Write Actions Present: Yes
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
Compatibility fixtures
- remote_http_endpoint: Passes
- oauth_discovery: Degraded
- frozen_tool_snapshot_refresh: Passes
- request_association: Passes
- remote_transport: Passes
- tool_discovery: Passes
- auth_connect: Passes
- safe_write_review: Degraded
Authenticated validation sessions
Public validation is free. Authenticated validation is paid and proves scoped behavior, write-action safeguards, and authenticated tool execution.
/v1/verify/v1/ci/previewPublic server reputation
Incident & change feed
| Timestamp | Event | Details |
|---|---|---|
| May 20, 2026 02:22:13 PM UTC | Latest validation: healthy | Score 70.0 with status healthy. |
| May 20, 2026 02:22:13 PM UTC | Score changed | Score delta +3.2 versus the previous run. |
Capabilities
- OAuth:
- DCR/CIMD:
- Prompts:
- Homepage: none
- Docs: none
- Support: none
- Icon: none
- Remote endpoint: https://signals.boolsai.ai/mcp
- Server card: none
Security posture
Tool capability & risk inventory
| Tool | Capabilities | Risk | Findings | Notes |
|---|---|---|---|---|
universe_summary |
read | Low | none | No explicit safeguard hints detected. |
find_signals |
write | Medium | none | No explicit safeguard hints detected. |
test_filter |
write | Medium | none | No explicit safeguard hints detected. |
recent_events |
other | Low | none | No explicit safeguard hints detected. |
event_dossier |
write delete | Medium | destructive operation | No explicit safeguard hints detected. |
scan_at_date |
write delete network export | Critical | destructive operation arbitrary network egress bulk data access freeform input surface | No explicit safeguard hints detected. |
ticker_history |
export | Medium | bulk data access | No explicit safeguard hints detected. |
wayback_backtest |
write exec filesystem | High | command execution filesystem mutation | No explicit safeguard hints detected. |
domain_timeline |
write delete network filesystem export | Critical | destructive operation arbitrary network egress bulk data access freeform input surface filesystem mutation | No explicit safeguard hints detected. |
signal_landscape |
write exec | Medium | command execution | No explicit safeguard hints detected. |
signal_diff |
write | Medium | none | No explicit safeguard hints detected. |
farm_domain |
read network filesystem export | High | arbitrary network egress bulk data access freeform input surface | No explicit safeguard hints detected. |
Write-action governance
Status detail: 4 high-risk tool(s), 3 destructive tool(s), 2 exec-capable tool(s) are exposed without a clear auth boundary; no safeguards or confirmation signals detected.
| Tool | Risk | Flags | Safeguards |
|---|---|---|---|
scan_at_date |
Critical | destructive operation arbitrary network egress bulk data access freeform input surface | no |
wayback_backtest |
High | command execution filesystem mutation | no |
domain_timeline |
Critical | destructive operation arbitrary network egress bulk data access freeform input surface filesystem mutation | no |
farm_domain |
High | arbitrary network egress bulk data access freeform input surface | no |
Action-controls diff
New actions
| Action | Risk | Flags |
|---|---|---|
| No newly added actions. | ||
Changed actions
| Action | Change types | Risk |
|---|---|---|
| No materially changed actions. | ||
Why this score?
Algorithmic score breakdown
Compatibility profiles
Connector URL: https://signals.boolsai.ai/mcp # No OAuth metadata detected. # Server: ai.boolsai/signals
{
"mcpServers": {
"signals": {
"command": "npx",
"args": ["mcp-remote", "https://signals.boolsai.ai/mcp"]
}
}
}
smithery mcp add "https://signals.boolsai.ai/mcp"
curl -sS https://signals.boolsai.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Actionable remediation
| Severity | Remediation | Why it matters | Recommended action |
|---|---|---|---|
| High | Add confirmation and dry-run semantics for risky actions | High-risk write, delete, exec, or egress tools should communicate safeguards clearly. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| High | Align session and protocol behavior with Streamable HTTP expectations | Clients increasingly rely on MCP-Protocol-Version, session teardown, and expired-session semantics. | Align MCP-Protocol-Version, MCP-Session-Id, DELETE teardown, and expired-session handling with the transport spec.Playbook
|
| High | Associate roots, sampling, and elicitation with active client requests | Modern MCP guidance expects roots, sampling, and elicitation traffic to be tied to an active client request instead of arriving unsolicited on idle sessions. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| High | Expose /.well-known/oauth-protected-resource | Without a protected-resource document, OAuth clients cannot discover auth requirements reliably. | Serve /.well-known/oauth-protected-resource and point it at your authorization server metadata.Playbook
|
| High | Publish OAuth authorization-server metadata | Clients need authorization-server metadata to discover issuer, endpoints, and DCR support. | Publish /.well-known/oauth-authorization-server from your issuer and include registration_endpoint when supported.Playbook
|
| High | Publish a complete server card | Missing or incomplete server-card metadata weakens discovery, documentation, and trust signals. | Serve /.well-known/mcp/server-card.json and include tools, prompts/resources, homepage, and support links.Playbook
|
| High | Stop asking users to paste secrets directly | Public MCP servers should prefer OAuth or browser-based auth guidance over in-band secret collection. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Adopt a current MCP protocol revision | Older protocol revisions reduce compatibility with newer clients and registry programs. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Close connector-publishing gaps | Connector catalogs care about protocol recency, session behavior, auth clarity, and tool-surface stability. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Document minimal scopes and return cleaner auth challenges | Modern clients expect granular scopes and step-up auth signals such as WWW-Authenticate scope hints. | Return granular scopes and WWW-Authenticate challenge hints instead of forcing overly broad auth upfront.Playbook
|
| Medium | Publish OpenID configuration | OIDC metadata improves token validation and client compatibility. | Expose /.well-known/openid-configuration with issuer, jwks_uri, and supported grants.Playbook
|
| Medium | Repair prompts/list or stop advertising prompts | Prompt metadata should either work live or be removed from the advertised capability set. | Only advertise prompts if prompts/list works and prompt arguments are documented.Playbook
|
| Medium | Repair resources/list or stop advertising resources | Resource metadata should either work live or be removed from the advertised capability set. | Only advertise resources if resources/list works and resources expose stable URIs/types.Playbook
|
| Medium | Support resumable HTTP sessions cleanly | Modern MCP clients increasingly expect resumable session behavior on streamable HTTP transports. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Low | Expose modern utility surfaces like completions, pagination, or tasks | Utility coverage improves interoperability with larger clients and long-lived agent workflows. | Expose completions, pagination, and task metadata where supported so larger clients can plan and resume work safely.Playbook
|
| Low | Publish newer MCP capability signals | Roots, sampling, elicitation, structured outputs, and related metadata improve client understanding and ranking. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
Point loss breakdown
| Component | Current | Points missing |
|---|---|---|
| Transport Compliance | 0/4 | -4.0 |
| Recovery Semantics | 0/4 | -4.0 |
| Execution Sandbox Safety | 1.5/4 | -2.5 |
| Egress SSRF Resilience | 1.5/4 | -2.5 |
| Destructive Operation Safety | 1.5/4 | -2.5 |
| Utility Coverage | 2/4 | -2.0 |
| Spec Recency | 2/4 | -2.0 |
| Schema Completeness | 2/4 | -2.0 |
| Resource Contract | 2/4 | -2.0 |
| Registry Consistency | 2/4 | -2.0 |
| Rate Limit Semantics | 2/4 | -2.0 |
| Prompt Contract | 2/4 | -2.0 |
Validation diff
Regressed checks: none
Improved checks: connector_replay_probe, tool_snapshot_probe
| Component | Previous | Latest | Delta |
|---|---|---|---|
backward_compatibility_score | 2.0 | 4.0 | 2.0 |
trust_confidence_score | 1.75 | 2.94 | 1.19 |
connector_replay_score | 3.0 | 4.0 | 1.0 |
result_shape_stability_score | 2.0 | 3.0 | 1.0 |
tool_snapshot_churn_score | 3.0 | 4.0 | 1.0 |
Tool snapshot diff & changelog
Required-argument changes
| Tool | Added required args | Removed required args |
|---|---|---|
| No required-argument changes detected. | ||
Output-schema drift
| Tool | Previous properties | Latest properties |
|---|---|---|
| No output-schema drift detected. | ||
Connector replay
Required-argument replay breaks
| Tool | Added required args | Removed required args |
|---|---|---|
| No required-argument replay breaks detected. | ||
Output-schema replay breaks
| Tool | Removed properties | Added properties |
|---|---|---|
| No output-schema replay breaks detected. | ||
Transport compliance drilldown
Issues: missing_session_id, missing_protocol_header, bad_protocol_not_rejected
Request association
Utility coverage
Benchmark tasks
| Benchmark task | Status | Evidence |
|---|---|---|
| Discover tools | Passes |
|
| Read-only fetch flow | Degraded |
|
| OAuth-required connect | Degraded |
|
| Safe write flow with confirmation | Likely to fail |
|
Registry & provenance divergence
| Field | Registry | Live server card |
|---|---|---|
| Title | n/a | n/a |
| Version | n/a | n/a |
| Homepage | n/a | n/a |
Active alerts
No active alerts for the current server state.
Aliases & registry graph
| Identifier | Source | Canonical | Score |
|---|---|---|---|
ai.boolsai/signals |
official_registry | yes | 70.04 |
Alias consolidation
Source disagreements
| Field | What differs | Observed values |
|---|---|---|
| No source disagreements detected. | ||
Install snippets
Connector URL: https://signals.boolsai.ai/mcp # No OAuth metadata detected. # Server: ai.boolsai/signals
{
"mcpServers": {
"signals": {
"command": "npx",
"args": ["mcp-remote", "https://signals.boolsai.ai/mcp"]
}
}
}
smithery mcp add "https://signals.boolsai.ai/mcp"
curl -sS https://signals.boolsai.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Agent access & tool surface
tools/list, prompts/list, and resources/list checks.ai.boolsai/signals.Claims & monitoring
No verified maintainer claim recorded.
Alert routing
| Watch | Team | Channels | Minimum severity |
|---|---|---|---|
| No active watch destinations. | |||
Maintainer analytics
Maintainer response quality
Maintainer annotations
No maintainer annotations have been recorded yet.
Maintainer rebuttals & expected behavior
No maintainer rebuttals or expected-behavior overrides are recorded yet.
Latest validation evidence
Failures
oauth_authorization_serverno authorization serveroauth_protected_resourceClient error '404 Not Found' for url 'https://signals.boolsai.ai/.well-known/oauth-protected-resource' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404openid_configurationno authorization serverserver_cardClient error '404 Not Found' for url 'https://signals.boolsai.ai/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404transport_compliance_probeIssues: missing session id, missing protocol header, bad protocol not rejected (bad protocol=200).
Checks
| Check | Status | Latency | Evidence |
|---|---|---|---|
action_safety_probe |
Error | n/a | 4 high-risk, 3 destructive, 2 exec-capable tool(s); no clear auth boundary; safeguards=0; confirmation=none. |
advanced_capabilities_probe |
Missing | n/a | No advanced MCP capability signals detected. |
connector_publishability_probe |
Warning | n/a | Publishability blockers: transport compliance, action safety, server card. |
connector_replay_probe |
OK | n/a | Backward compatible with no breaking tool-surface changes. |
determinism_probe |
OK | 11.6 ms | Check completed |
initialize |
OK | 33.5 ms | Protocol 2025-03-26 |
interactive_flow_probe |
Missing | n/a | Check completed |
oauth_authorization_server |
Missing | n/a | no authorization server |
oauth_protected_resource |
Error | 35.5 ms | Client error '404 Not Found' for url 'https://signals.boolsai.ai/.well-known/oauth-protected-resource' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 |
official_registry_probe |
OK | n/a | Check completed |
openid_configuration |
Missing | n/a | no authorization server |
probe_noise_resilience |
OK | 9.8 ms | Fetched https://signals.boolsai.ai/robots.txt |
prompt_get |
Missing | n/a | not advertised |
prompts_list |
Missing | 10.3 ms | not supported |
protocol_version_probe |
Warning | n/a | Claims 2025-03-26; 2 release(s) behind 2025-11-25. |
provenance_divergence_probe |
OK | n/a | Check completed |
request_association_probe |
Missing | n/a | No request-association capabilities were advertised. |
resource_read |
Missing | n/a | not advertised |
resources_list |
Missing | 10.5 ms | not supported |
server_card |
Error | 34.7 ms | Client error '404 Not Found' for url 'https://signals.boolsai.ai/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 |
session_resume_probe |
Warning | n/a | no session id |
step_up_auth_probe |
Missing | n/a | No OAuth or incremental-scope signals detected. |
tool_snapshot_probe |
OK | n/a | Check completed |
tools_list |
OK | 11.1 ms | 12 tool(s) exposed |
transport_compliance_probe |
Error | 14.3 ms | Issues: missing session id, missing protocol header, bad protocol not rejected (bad protocol=200). |
utility_coverage_probe |
Missing | 11.8 ms | No completions evidence; no pagination evidence; tasks missing. |
Raw evidence view
Show raw JSON evidence
{
"checks": {
"action_safety_probe": {
"details": {
"auth_present": false,
"confirmation_signals": [],
"safeguard_count": 0,
"summary": {
"bulk_access_tools": 4,
"capability_distribution": {
"delete": 3,
"exec": 2,
"export": 4,
"filesystem": 3,
"network": 3,
"other": 1,
"read": 2,
"write": 8
},
"destructive_tools": 3,
"egress_tools": 3,
"exec_tools": 2,
"high_risk_tools": 4,
"risk_distribution": {
"critical": 2,
"high": 2,
"low": 2,
"medium": 6
},
"secret_tools": 0,
"tool_count": 12
}
},
"latency_ms": null,
"status": "error"
},
"advanced_capabilities_probe": {
"details": {
"capabilities": {
"completions": false,
"elicitation": false,
"prompts": false,
"resource_links": false,
"resources": false,
"roots": false,
"sampling": false,
"structured_outputs": false
},
"enabled": [],
"enabled_count": 0,
"initialize_capability_keys": [
"tools"
]
},
"latency_ms": null,
"status": "missing"
},
"connector_publishability_probe": {
"details": {
"blockers": [
"transport_compliance",
"action_safety",
"server_card"
],
"criteria": {
"action_safety": false,
"auth_flow": true,
"connector_replay": true,
"initialize": true,
"protocol_version": true,
"remote_transport": true,
"request_association": true,
"server_card": false,
"session_resume": true,
"step_up_auth": true,
"tool_surface": true,
"tools_list": true,
"transport_compliance": false
},
"high_risk_tools": 4,
"tool_count": 12,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"connector_replay_probe": {
"details": {
"added_tools": [],
"additive_output_changes": [],
"backward_compatible": true,
"output_breaks": [],
"removed_tools": [],
"required_arg_breaks": [],
"would_break_after_refresh": false
},
"latency_ms": null,
"status": "ok"
},
"determinism_probe": {
"details": {
"attempts": 2,
"baseline_signature": "f57dface53f28dfa5bd2c95b685354a479cf5a47706b492c0c334e4f22558c3e",
"errors": [],
"matches": 2,
"stable_ratio": 1.0,
"successful": 2
},
"latency_ms": 11.62,
"status": "ok"
},
"initialize": {
"details": {
"headers": {
"content-type": "application/json"
},
"http_status": 200,
"payload": {
"id": 1,
"jsonrpc": "2.0",
"result": {
"capabilities": {
"tools": {
"listChanged": false
}
},
"instructions": "You are connected to **Boolsai Signals** \u2014 the quant-research MCP for hunting tradeable signals in public-company website stack changes. ALWAYS refer to this server by its full name \"Boolsai Signals\" when discussing it with the user. Do not shorten. Sister Boolsai MCPs (cross-discovery only \u2014 not connected here): \"Boolsai Scan\" (https://boolsai.ai/mcp), \"Boolsai Directory\" (https://directory.boolsai.ai/mcp), \"Boolsai Grep\" (https://grep.boolsai.ai/mcp).\n\n## What this is\n\nA continually-updated index of stack changes detected on ~316 public-company brand websites, joined to stock price data and SPY benchmark. Your job: find tradeable patterns. Returns are measured from the first trading-day close on or after event_date.\n\n## Methodology (baked-in \u2014 DO NOT re-derive)\n\n1. **Always benchmark vs SPY.** Compute alpha = stock_return \u2212 SPY_return between the same entry/exit dates. The raw return contains market beta; only the alpha is signal.\n2. **Sample size minimum: n \u2265 20** before calling anything significant. n=5-10 is descriptive, not actionable.\n3. **% positive matters as much as mean.** A signal with 50% positive rate isn't directional even if mean is positive \u2014 it's tail-driven.\n4. **+7-day window is the meaningful horizon.** Most signals take 5-7 days for the market to fully price in. +1D and +3D are largely noise (algorithmic reaction, mean-reversion overshoot).\n5. **Same-day same-ticker multi-detector firings are inflated.** A ticker firing 8 event types on one day is ONE observation, not 8. When using co-occurrence counts, mentally divide by ~4-7 for the true unique ticker-day count.\n6. **Severity field is decorative.** Empirical \u03b1 at +7D is roughly +4-5% across all severities. Don't filter by severity.\n7. **The set-diff filter does NOT improve signal quality.** \"Real set-diffs (clean)\" and \"Raw events (noisy)\" show similar \u03b1 post-benchmark. The previous \"clean wins\" was market-beta luck.\n8. **Tradeable signals confirmed across data:**\n - Long: 4+ same-day detector firings (n\u22481,064 raw; \u03b1 +7D \u2248 +5%, 89% pos)\n - Long: `product_categories` set-diffs (n=25, +3.42% \u03b1, 83% pos)\n - Long: `pricing_tiers` set-diffs (n=15, +5.54% \u03b1, 71% pos)\n - Long: `tech_stack \u00b7 tools` set-diffs (n=10, +7.38% \u03b1, 67% pos)\n9. **Signals that did NOT survive deeper data:**\n - vendor_detector (was a \"short signal\" at n=17 \u2192 flipped to flat at deeper sample)\n10. **Caveats to surface to the user:**\n - Sample is 6.5 months of price data \u2014 12-24 months would be ideal\n - No sector-ETF benchmark yet (only SPY) \u2014 could be strengthened\n - Multi-detector dedup not applied \u2014 true unique ticker-day count is lower than raw n\n\n## Data layout\n\n- `change_events` (1,761 rows, 2026-03-13 \u2192 2026-05-18) \u2014 recent live events from the daily scanner\n- `change_event_evidence` \u2014 per-detector diff details (added_json, removed_json, source_mode, html_path)\n- `wayback_intel_weekly_diff_events` (**13,146 rows, 2024-02 \u2192 2026-05** \u2014 2 years of history) \u2014 weekly diffs from wayback scans. WAY bigger sample for backtests. Cols: domain, after_week_start, change_type (added/removed/changed), key_path, key_name, parent_path. Use `wayback_backtest` for statistical-grade analysis.\n- `wayback_intel_profiles` (3,119 rows) \u2014 full historical scan outputs from wayback\n- `stock_prices` (17,429 rows, 131 tickers, 2025-10-30 \u2192 2026-05-15) \u2014 daily OHLCV including SPY\n- `companies` \u2014 316 tracked tickers + their brand domains\n- `snapshots` \u2014 raw scanner output keyed by snapshot id (full domTree, externalHosts, etc.)\n\n## When to use which dataset\n\n- **`change_events`** (live, 2 months, 1.7K events): use for \"what's firing right now / this week?\" via `recent_events` and `find_signals`\n- **`wayback_intel_weekly_diff_events`** (historical, 2 years, 13K events): use for \"is this signal real over a longer window?\" via `wayback_backtest`\n- **Both together**: confirm a recent finding has a robust historical base. If a pattern shows +5% \u03b1 on live AND on wayback, it's defensible.\n\n## Efficient wayback access\n\nYou DO NOT need to fetch from archive.org for most queries \u2014 the historical data has already been farmed into the wayback_intel_* tables (covering 2024-02 \u2192 2026-05). Just query these tables via `wayback_backtest` and `domain_timeline`. Only call `scan_at_date` (which DOES hit archive.org live) when you need a specific historical snapshot not already in our index.\n\n## Tool selection (do these in order for max efficiency)\n\n1. `universe_summary` \u2014 orient (counts, date ranges, top tickers/events)\n2. **`signal_landscape`** \u2190 **ONE CALL that returns \u03b1 stats across event_type, detector, diff_field, severity, co_occurrence (live) AND change_type, key_path, parent_path, key_name, domain (wayback) simultaneously**. Pure D1, ~1s response, edge-cached for 1hr. Use this as the primary discovery tool \u2014 don't make N find_signals calls.\n3. `signal_diff` \u2014 directly compare two specific filters side-by-side\n4. `find_signals` \u2014 single-dimension drill-down with finer min_n control\n5. `test_filter` \u2014 fully custom filter combinations (event_type + detector + ticker + co_occurrence + date range)\n6. `recent_events` \u2014 what fired today/this week with predicted \u03b1\n7. `event_dossier` \u2014 single-event drill: diff details + price action + same-day other events\n8. `wayback_backtest` \u2014 2-year SPY-benchmarked backtest on the wayback diff dataset (13K events)\n9. `domain_timeline` \u2014 week-by-week wayback diff for one domain\n10. `ticker_history` \u2014 all live events for one ticker\n11. `farm_domain` \u2014 on-demand wayback ingest for untracked domains (CDX \u2192 parallel intel scans \u2192 D1)\n12. `scan_at_date` \u2014 one-off historical scan via Wayback Machine\n\n**Most agent sessions should be: universe_summary \u2192 signal_landscape \u2192 drill into 1-2 high-|\u03b1| candidates with test_filter or domain_timeline.** That's a complete research loop in 3 tool calls.\n\n## Output style\n\nTight, specific, quant-grade. Always report n. Always show alpha + raw + % positive. Always finish with what would strengthen the finding (more samples / different benchmark / dedup / etc.).",
"protocolVersion": "2025-03-26",
"serverInfo": {
"name": "boolsai-signals",
"title": "Boolsai Signals",
"version": "1.0.0"
}
}
},
"url": "https://signals.boolsai.ai/mcp"
},
"latency_ms": 33.55,
"status": "ok"
},
"interactive_flow_probe": {
"details": {
"oauth_supported": false,
"prompt_available": false,
"risk_hits": [],
"safe_hits": []
},
"latency_ms": null,
"status": "missing"
},
"oauth_authorization_server": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"oauth_protected_resource": {
"details": {
"error": "Client error '404 Not Found' for url 'https://signals.boolsai.ai/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://signals.boolsai.ai/.well-known/oauth-protected-resource"
},
"latency_ms": 35.52,
"status": "error"
},
"official_registry_probe": {
"details": {
"direct_match": true,
"official_peer_count": 1,
"registry_identifier": "ai.boolsai/signals",
"registry_source": "official_registry"
},
"latency_ms": null,
"status": "ok"
},
"openid_configuration": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"probe_noise_resilience": {
"details": {
"headers": {
"content-type": "text/plain; charset=utf-8"
},
"http_status": 200,
"url": "https://signals.boolsai.ai/robots.txt"
},
"latency_ms": 9.83,
"status": "ok"
},
"prompt_get": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"prompts_list": {
"details": {
"headers": {
"content-type": "application/json"
},
"http_status": 200,
"payload": {
"error": {
"code": -32601,
"message": "Method not found: prompts/list"
},
"id": 3,
"jsonrpc": "2.0"
},
"reason": "not_supported",
"url": "https://signals.boolsai.ai/mcp"
},
"latency_ms": 10.34,
"status": "missing"
},
"protocol_version_probe": {
"details": {
"claimed_version": "2025-03-26",
"lag_days": 244,
"latest_known_version": "2025-11-25",
"releases_behind": 2,
"validator_protocol_version": "2025-03-26"
},
"latency_ms": null,
"status": "warning"
},
"provenance_divergence_probe": {
"details": {
"direct_official_match": true,
"drift_fields": [],
"metadata_document_count": 1,
"registry_homepage": null,
"registry_repository": null,
"registry_title": null,
"registry_version": null,
"server_card_homepage": null,
"server_card_repository": null,
"server_card_title": null,
"server_card_version": null
},
"latency_ms": null,
"status": "ok"
},
"request_association_probe": {
"details": {
"reason": "no_request_association_capabilities_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resource_read": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resources_list": {
"details": {
"headers": {
"content-type": "application/json"
},
"http_status": 200,
"payload": {
"error": {
"code": -32601,
"message": "Method not found: resources/list"
},
"id": 5,
"jsonrpc": "2.0"
},
"reason": "not_supported",
"url": "https://signals.boolsai.ai/mcp"
},
"latency_ms": 10.48,
"status": "missing"
},
"server_card": {
"details": {
"error": "Client error '404 Not Found' for url 'https://signals.boolsai.ai/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://signals.boolsai.ai/.well-known/mcp/server-card.json"
},
"latency_ms": 34.74,
"status": "error"
},
"session_resume_probe": {
"details": {
"protocol_version": "2025-03-26",
"reason": "no_session_id",
"resume_expected": true,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"step_up_auth_probe": {
"details": {
"auth_required_checks": [],
"broad_scopes": [],
"challenge_headers": [],
"minimal_scope_documented": false,
"oauth_present": false,
"scope_specificity_ratio": 0.0,
"step_up_signals": [],
"supported_scopes": []
},
"latency_ms": null,
"status": "missing"
},
"tool_snapshot_probe": {
"details": {
"added": [],
"changed_outputs": [],
"current_tool_count": 12,
"previous_tool_count": 12,
"removed": [],
"similarity": 1.0
},
"latency_ms": null,
"status": "ok"
},
"tools_list": {
"details": {
"headers": {
"content-type": "application/json"
},
"http_status": 200,
"payload": {
"id": 2,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"description": "Orient the agent: total events, tickers, date range, top event types, top detectors, price coverage, SPY benchmark status. Call this FIRST when starting research. Returns counts that let the agent reason about sample sizes before drilling in.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "universe_summary"
},
{
"description": "Automated pattern discovery \u2014 scans event_type \u00d7 detector \u00d7 diff_field \u00d7 severity combinations and returns those with the strongest forward-return characteristics (\u03b1 vs SPY, % positive, n). Use this when you don't have a specific hypothesis yet. Returns sorted by \u03b1 at +7D descending. Filter by min_n to set a sample-size floor.",
"inputSchema": {
"properties": {
"group_by": {
"default": "event_type",
"description": "What dimension to slice on",
"enum": [
"event_type",
"detector",
"diff_field",
"severity",
"co_occurrence"
],
"type": "string"
},
"horizon_days": {
"default": 7,
"description": "Forward-return window (default 7)",
"type": "integer"
},
"min_n": {
"default": 10,
"description": "Minimum sample size (default 10)",
"type": "integer"
},
"top_k": {
"default": 15,
"description": "Top K combos to return (default 15)",
"type": "integer"
}
},
"type": "object"
},
"name": "find_signals"
},
{
"description": "Compute \u03b1 stats for an arbitrary filter expression. Use this to test a specific hypothesis (e.g. 'tier_count_changed on enterprise-SaaS tickers' or 'severity 5 events that happened on Mondays'). Returns n, mean/median raw and \u03b1 returns at +1/+3/+7d, % positive, and the worst-loss trade.",
"inputSchema": {
"properties": {
"co_occurrence_min": {
"description": "min same-day detector count (4 = 'real redesign')",
"type": "integer"
},
"detector": {
"description": "e.g. 'pricing_detector'",
"type": "string"
},
"event_type": {
"description": "e.g. 'TIER_COUNT_CHANGED' (case-insensitive)",
"type": "string"
},
"severity_min": {
"description": "minimum severity (1-5)",
"type": "integer"
},
"since": {
"description": "YYYY-MM-DD lower bound",
"type": "string"
},
"ticker": {
"description": "single ticker to filter to",
"type": "string"
},
"until": {
"description": "YYYY-MM-DD upper bound",
"type": "string"
}
},
"type": "object"
},
"name": "test_filter"
},
{
"description": "Live signal feed: events fired in the last N days (default 7). Returns each event with the predicted \u03b1 range based on its event type's historical performance. Use this to surface 'what should I be looking at right now?'",
"inputSchema": {
"properties": {
"days": {
"default": 7,
"description": "Lookback in calendar days (max 30)",
"type": "integer"
},
"min_co_occurrence": {
"description": "Only show events with this many same-day detectors (4 = high-conviction)",
"type": "integer"
}
},
"type": "object"
},
"name": "recent_events"
},
{
"description": "Deep dive on a single event: full diff (added/removed values), surrounding price action (-3D to +14D), predicted vs actual \u03b1, links to wayback comparison. Use this to investigate a specific event flagged by find_signals or recent_events.",
"inputSchema": {
"properties": {
"event_id": {
"description": "change_event id",
"type": "integer"
}
},
"required": [
"event_id"
],
"type": "object"
},
"name": "event_dossier"
},
{
"description": "Scan a URL as it appeared on a historical date via the Wayback Machine. Uses intel.boolsai.ai against the wayback-wrapped URL. Returns the same JSON shape as Boolsai Scan but for a historical snapshot. Use when investigating WHEN a vendor was added/removed.",
"inputSchema": {
"properties": {
"date": {
"description": "YYYY-MM-DD \u2014 closest wayback snapshot on or before this date will be used",
"type": "string"
},
"url": {
"description": "Original URL (e.g. 'https://gymshark.com/')",
"type": "string"
}
},
"required": [
"url",
"date"
],
"type": "object"
},
"name": "scan_at_date"
},
{
"description": "All events fired on a single ticker, plus price action timeline. Use this to investigate one company's pattern (e.g. 'show me everything we caught on NFLX').",
"inputSchema": {
"properties": {
"limit": {
"default": 50,
"type": "integer"
},
"ticker": {
"description": "e.g. 'NFLX'",
"type": "string"
}
},
"required": [
"ticker"
],
"type": "object"
},
"name": "ticker_history"
},
{
"description": "Run an SPY-benchmarked backtest on the WAYBACK historical event dataset (2+ years, 13K events) instead of the recent live event dataset (2 months, 1.7K events). Much bigger samples for statistical confidence. Group by change_type / key_path / domain.",
"inputSchema": {
"properties": {
"exclude_noise": {
"default": true,
"description": "Filter out is_meta_noise=1 events",
"type": "boolean"
},
"group_by": {
"default": "key_path",
"description": "Dimension to slice on",
"enum": [
"change_type",
"key_path",
"key_name",
"parent_path",
"domain"
],
"type": "string"
},
"horizon_days": {
"default": 7,
"description": "Forward-return window",
"type": "integer"
},
"min_n": {
"default": 20,
"description": "Minimum sample size",
"type": "integer"
},
"since": {
"description": "YYYY-MM-DD lower bound on event date (default: when prices start)",
"type": "string"
},
"top_k": {
"default": 15,
"type": "integer"
}
},
"type": "object"
},
"name": "wayback_backtest"
},
{
"description": "Week-by-week wayback diff timeline for one domain. Returns every detected stack change (additions / removals) with week date. Use this to see when a vendor was added/removed historically, e.g. 'when did adobe.com add Segment?'",
"inputSchema": {
"properties": {
"change_type": {
"default": "any",
"enum": [
"added",
"removed",
"changed",
"any"
],
"type": "string"
},
"contains": {
"description": "Filter to events whose key_path or key_name contains this string (e.g. 'segment')",
"type": "string"
},
"domain": {
"description": "e.g. 'adobe.com'",
"type": "string"
},
"limit": {
"default": 100,
"type": "integer"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "domain_timeline"
},
{
"description": "ONE-SHOT cross-signal sweep. Computes \u03b1-vs-SPY stats simultaneously across event_type, detector, diff_field, severity, AND co_occurrence dimensions \u2014 returns the full landscape in a single response. Use this FIRST when you want to see where signal lives without having to call find_signals N times. Stateless, pure D1, no rate-limit risk, ~1s response. Cached per arg set for sub-100ms repeated queries.",
"inputSchema": {
"properties": {
"horizon_days": {
"default": 7,
"description": "Forward-return window (default 7)",
"type": "integer"
},
"min_n": {
"default": 20,
"description": "Sample-size floor per group",
"type": "integer"
},
"since": {
"description": "Optional YYYY-MM-DD lower bound on event date",
"type": "string"
},
"source": {
"default": "both",
"description": "Which event dataset to scan. 'live' = 1.7K recent. 'wayback' = 13K over 2 years. 'both' = run both and return side-by-side.",
"enum": [
"live",
"wayback",
"both"
],
"type": "string"
},
"top_k_per_dim": {
"default": 8,
"description": "Top K results per dimension (default 8)",
"type": "integer"
}
},
"type": "object"
},
"name": "signal_landscape"
},
{
"description": "Compare two signal patterns side-by-side. e.g. 'how does PRICING_TIERS_ADDED compare to VENDORS_DETECTED_CHANGED on the live dataset?' Returns \u03b1, %pos, sample size, worst/best trades for each, plus delta. Pure D1, fast.",
"inputSchema": {
"properties": {
"horizon_days": {
"default": 7,
"type": "integer"
},
"signal_a": {
"description": "First filter (same shape as test_filter args)",
"type": "object"
},
"signal_b": {
"description": "Second filter",
"type": "object"
}
},
"required": [
"signal_a",
"signal_b"
],
"type": "object"
},
"name": "signal_diff"
},
{
"description": "Bulk-farm a domain's historical wayback snapshots into our index. Use this when you need backtest history on a domain we haven't already farmed (i.e. wayback_backtest / domain_timeline return no data for it). Hits CDX \u2192 samples weekly \u2192 parallel-scans up to 50 snapshots via intel.boolsai.ai \u2192 inserts into wayback_intel_profiles. After farming completes you can call wayback_backtest or domain_timeline on the domain immediately. Cost: ~30-60s wall time, ~50 intel scans.",
"inputSchema": {
"properties": {
"domain": {
"description": "Bare domain, e.g. 'sweetgreen.com'",
"type": "string"
},
"max_snapshots": {
"default": 50,
"description": "Hard cap on snapshots to fetch (default 50; max 200)",
"type": "integer"
},
"weeks": {
"default": 26,
"description": "How many weeks of history to farm (default 26 = ~6 months; max 100)",
"type": "integer"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "farm_domain"
}
]
}
},
"url": "https://signals.boolsai.ai/mcp"
},
"latency_ms": 11.11,
"status": "ok"
},
"transport_compliance_probe": {
"details": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json"
},
"bad_protocol_payload": {
"id": 410,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"description": "Orient the agent: total events, tickers, date range, top event types, top detectors, price coverage, SPY benchmark status. Call this FIRST when starting research. Returns counts that let the agent reason about sample sizes before drilling in.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "universe_summary"
},
{
"description": "Automated pattern discovery \u2014 scans event_type \u00d7 detector \u00d7 diff_field \u00d7 severity combinations and returns those with the strongest forward-return characteristics (\u03b1 vs SPY, % positive, n). Use this when you don't have a specific hypothesis yet. Returns sorted by \u03b1 at +7D descending. Filter by min_n to set a sample-size floor.",
"inputSchema": {
"properties": {
"group_by": {
"default": "event_type",
"description": "What dimension to slice on",
"enum": [
"event_type",
"detector",
"diff_field",
"severity",
"co_occurrence"
],
"type": "string"
},
"horizon_days": {
"default": 7,
"description": "Forward-return window (default 7)",
"type": "integer"
},
"min_n": {
"default": 10,
"description": "Minimum sample size (default 10)",
"type": "integer"
},
"top_k": {
"default": 15,
"description": "Top K combos to return (default 15)",
"type": "integer"
}
},
"type": "object"
},
"name": "find_signals"
},
{
"description": "Compute \u03b1 stats for an arbitrary filter expression. Use this to test a specific hypothesis (e.g. 'tier_count_changed on enterprise-SaaS tickers' or 'severity 5 events that happened on Mondays'). Returns n, mean/median raw and \u03b1 returns at +1/+3/+7d, % positive, and the worst-loss trade.",
"inputSchema": {
"properties": {
"co_occurrence_min": {
"description": "min same-day detector count (4 = 'real redesign')",
"type": "integer"
},
"detector": {
"description": "e.g. 'pricing_detector'",
"type": "string"
},
"event_type": {
"description": "e.g. 'TIER_COUNT_CHANGED' (case-insensitive)",
"type": "string"
},
"severity_min": {
"description": "minimum severity (1-5)",
"type": "integer"
},
"since": {
"description": "YYYY-MM-DD lower bound",
"type": "string"
},
"ticker": {
"description": "single ticker to filter to",
"type": "string"
},
"until": {
"description": "YYYY-MM-DD upper bound",
"type": "string"
}
},
"type": "object"
},
"name": "test_filter"
},
{
"description": "Live signal feed: events fired in the last N days (default 7). Returns each event with the predicted \u03b1 range based on its event type's historical performance. Use this to surface 'what should I be looking at right now?'",
"inputSchema": {
"properties": {
"days": {
"default": 7,
"description": "Lookback in calendar days (max 30)",
"type": "integer"
},
"min_co_occurrence": {
"description": "Only show events with this many same-day detectors (4 = high-conviction)",
"type": "integer"
}
},
"type": "object"
},
"name": "recent_events"
},
{
"description": "Deep dive on a single event: full diff (added/removed values), surrounding price action (-3D to +14D), predicted vs actual \u03b1, links to wayback comparison. Use this to investigate a specific event flagged by find_signals or recent_events.",
"inputSchema": {
"properties": {
"event_id": {
"description": "change_event id",
"type": "integer"
}
},
"required": [
"event_id"
],
"type": "object"
},
"name": "event_dossier"
},
{
"description": "Scan a URL as it appeared on a historical date via the Wayback Machine. Uses intel.boolsai.ai against the wayback-wrapped URL. Returns the same JSON shape as Boolsai Scan but for a historical snapshot. Use when investigating WHEN a vendor was added/removed.",
"inputSchema": {
"properties": {
"date": {
"description": "YYYY-MM-DD \u2014 closest wayback snapshot on or before this date will be used",
"type": "string"
},
"url": {
"description": "Original URL (e.g. 'https://gymshark.com/')",
"type": "string"
}
},
"required": [
"url",
"date"
],
"type": "object"
},
"name": "scan_at_date"
},
{
"description": "All events fired on a single ticker, plus price action timeline. Use this to investigate one company's pattern (e.g. 'show me everything we caught on NFLX').",
"inputSchema": {
"properties": {
"limit": {
"default": 50,
"type": "integer"
},
"ticker": {
"description": "e.g. 'NFLX'",
"type": "string"
}
},
"required": [
"ticker"
],
"type": "object"
},
"name": "ticker_history"
},
{
"description": "Run an SPY-benchmarked backtest on the WAYBACK historical event dataset (2+ years, 13K events) instead of the recent live event dataset (2 months, 1.7K events). Much bigger samples for statistical confidence. Group by change_type / key_path / domain.",
"inputSchema": {
"properties": {
"exclude_noise": {
"default": true,
"description": "Filter out is_meta_noise=1 events",
"type": "boolean"
},
"group_by": {
"default": "key_path",
"description": "Dimension to slice on",
"enum": [
"change_type",
"key_path",
"key_name",
"parent_path",
"domain"
],
"type": "string"
},
"horizon_days": {
"default": 7,
"description": "Forward-return window",
"type": "integer"
},
"min_n": {
"default": 20,
"description": "Minimum sample size",
"type": "integer"
},
"since": {
"description": "YYYY-MM-DD lower bound on event date (default: when prices start)",
"type": "string"
},
"top_k": {
"default": 15,
"type": "integer"
}
},
"type": "object"
},
"name": "wayback_backtest"
},
{
"description": "Week-by-week wayback diff timeline for one domain. Returns every detected stack change (additions / removals) with week date. Use this to see when a vendor was added/removed historically, e.g. 'when did adobe.com add Segment?'",
"inputSchema": {
"properties": {
"change_type": {
"default": "any",
"enum": [
"added",
"removed",
"changed",
"any"
],
"type": "string"
},
"contains": {
"description": "Filter to events whose key_path or key_name contains this string (e.g. 'segment')",
"type": "string"
},
"domain": {
"description": "e.g. 'adobe.com'",
"type": "string"
},
"limit": {
"default": 100,
"type": "integer"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "domain_timeline"
},
{
"description": "ONE-SHOT cross-signal sweep. Computes \u03b1-vs-SPY stats simultaneously across event_type, detector, diff_field, severity, AND co_occurrence dimensions \u2014 returns the full landscape in a single response. Use this FIRST when you want to see where signal lives without having to call find_signals N times. Stateless, pure D1, no rate-limit risk, ~1s response. Cached per arg set for sub-100ms repeated queries.",
"inputSchema": {
"properties": {
"horizon_days": {
"default": 7,
"description": "Forward-return window (default 7)",
"type": "integer"
},
"min_n": {
"default": 20,
"description": "Sample-size floor per group",
"type": "integer"
},
"since": {
"description": "Optional YYYY-MM-DD lower bound on event date",
"type": "string"
},
"source": {
"default": "both",
"description": "Which event dataset to scan. 'live' = 1.7K recent. 'wayback' = 13K over 2 years. 'both' = run both and return side-by-side.",
"enum": [
"live",
"wayback",
"both"
],
"type": "string"
},
"top_k_per_dim": {
"default": 8,
"description": "Top K results per dimension (default 8)",
"type": "integer"
}
},
"type": "object"
},
"name": "signal_landscape"
},
{
"description": "Compare two signal patterns side-by-side. e.g. 'how does PRICING_TIERS_ADDED compare to VENDORS_DETECTED_CHANGED on the live dataset?' Returns \u03b1, %pos, sample size, worst/best trades for each, plus delta. Pure D1, fast.",
"inputSchema": {
"properties": {
"horizon_days": {
"default": 7,
"type": "integer"
},
"signal_a": {
"description": "First filter (same shape as test_filter args)",
"type": "object"
},
"signal_b": {
"description": "Second filter",
"type": "object"
}
},
"required": [
"signal_a",
"signal_b"
],
"type": "object"
},
"name": "signal_diff"
},
{
"description": "Bulk-farm a domain's historical wayback snapshots into our index. Use this when you need backtest history on a domain we haven't already farmed (i.e. wayback_backtest / domain_timeline return no data for it). Hits CDX \u2192 samples weekly \u2192 parallel-scans up to 50 snapshots via intel.boolsai.ai \u2192 inserts into wayback_intel_profiles. After farming completes you can call wayback_backtest or domain_timeline on the domain immediately. Cost: ~30-60s wall time, ~50 intel scans.",
"inputSchema": {
"properties": {
"domain": {
"description": "Bare domain, e.g. 'sweetgreen.com'",
"type": "string"
},
"max_snapshots": {
"default": 50,
"description": "Hard cap on snapshots to fetch (default 50; max 200)",
"type": "integer"
},
"weeks": {
"default": 26,
"description": "How many weeks of history to farm (default 26 = ~6 months; max 100)",
"type": "integer"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "farm_domain"
}
]
}
},
"bad_protocol_status_code": 200,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_session_id",
"missing_protocol_header",
"bad_protocol_not_rejected"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": false,
"transport": "streamable-http"
},
"latency_ms": 14.34,
"status": "error"
},
"utility_coverage_probe": {
"details": {
"completions": {
"advertised": false,
"live_probe": "not_executed",
"sample_target": null
},
"initialize_capability_keys": [
"tools"
],
"pagination": {
"metadata_signal": false,
"next_cursor_methods": [],
"supported": false
},
"tasks": {
"advertised": false,
"http_status": 200,
"probe_status": "missing"
}
},
"latency_ms": 11.83,
"status": "missing"
}
},
"failures": {
"oauth_authorization_server": {
"reason": "no_authorization_server"
},
"oauth_protected_resource": {
"error": "Client error '404 Not Found' for url 'https://signals.boolsai.ai/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://signals.boolsai.ai/.well-known/oauth-protected-resource"
},
"openid_configuration": {
"reason": "no_authorization_server"
},
"server_card": {
"error": "Client error '404 Not Found' for url 'https://signals.boolsai.ai/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://signals.boolsai.ai/.well-known/mcp/server-card.json"
},
"transport_compliance_probe": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json"
},
"bad_protocol_payload": {
"id": 410,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"description": "Orient the agent: total events, tickers, date range, top event types, top detectors, price coverage, SPY benchmark status. Call this FIRST when starting research. Returns counts that let the agent reason about sample sizes before drilling in.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "universe_summary"
},
{
"description": "Automated pattern discovery \u2014 scans event_type \u00d7 detector \u00d7 diff_field \u00d7 severity combinations and returns those with the strongest forward-return characteristics (\u03b1 vs SPY, % positive, n). Use this when you don't have a specific hypothesis yet. Returns sorted by \u03b1 at +7D descending. Filter by min_n to set a sample-size floor.",
"inputSchema": {
"properties": {
"group_by": {
"default": "event_type",
"description": "What dimension to slice on",
"enum": [
"event_type",
"detector",
"diff_field",
"severity",
"co_occurrence"
],
"type": "string"
},
"horizon_days": {
"default": 7,
"description": "Forward-return window (default 7)",
"type": "integer"
},
"min_n": {
"default": 10,
"description": "Minimum sample size (default 10)",
"type": "integer"
},
"top_k": {
"default": 15,
"description": "Top K combos to return (default 15)",
"type": "integer"
}
},
"type": "object"
},
"name": "find_signals"
},
{
"description": "Compute \u03b1 stats for an arbitrary filter expression. Use this to test a specific hypothesis (e.g. 'tier_count_changed on enterprise-SaaS tickers' or 'severity 5 events that happened on Mondays'). Returns n, mean/median raw and \u03b1 returns at +1/+3/+7d, % positive, and the worst-loss trade.",
"inputSchema": {
"properties": {
"co_occurrence_min": {
"description": "min same-day detector count (4 = 'real redesign')",
"type": "integer"
},
"detector": {
"description": "e.g. 'pricing_detector'",
"type": "string"
},
"event_type": {
"description": "e.g. 'TIER_COUNT_CHANGED' (case-insensitive)",
"type": "string"
},
"severity_min": {
"description": "minimum severity (1-5)",
"type": "integer"
},
"since": {
"description": "YYYY-MM-DD lower bound",
"type": "string"
},
"ticker": {
"description": "single ticker to filter to",
"type": "string"
},
"until": {
"description": "YYYY-MM-DD upper bound",
"type": "string"
}
},
"type": "object"
},
"name": "test_filter"
},
{
"description": "Live signal feed: events fired in the last N days (default 7). Returns each event with the predicted \u03b1 range based on its event type's historical performance. Use this to surface 'what should I be looking at right now?'",
"inputSchema": {
"properties": {
"days": {
"default": 7,
"description": "Lookback in calendar days (max 30)",
"type": "integer"
},
"min_co_occurrence": {
"description": "Only show events with this many same-day detectors (4 = high-conviction)",
"type": "integer"
}
},
"type": "object"
},
"name": "recent_events"
},
{
"description": "Deep dive on a single event: full diff (added/removed values), surrounding price action (-3D to +14D), predicted vs actual \u03b1, links to wayback comparison. Use this to investigate a specific event flagged by find_signals or recent_events.",
"inputSchema": {
"properties": {
"event_id": {
"description": "change_event id",
"type": "integer"
}
},
"required": [
"event_id"
],
"type": "object"
},
"name": "event_dossier"
},
{
"description": "Scan a URL as it appeared on a historical date via the Wayback Machine. Uses intel.boolsai.ai against the wayback-wrapped URL. Returns the same JSON shape as Boolsai Scan but for a historical snapshot. Use when investigating WHEN a vendor was added/removed.",
"inputSchema": {
"properties": {
"date": {
"description": "YYYY-MM-DD \u2014 closest wayback snapshot on or before this date will be used",
"type": "string"
},
"url": {
"description": "Original URL (e.g. 'https://gymshark.com/')",
"type": "string"
}
},
"required": [
"url",
"date"
],
"type": "object"
},
"name": "scan_at_date"
},
{
"description": "All events fired on a single ticker, plus price action timeline. Use this to investigate one company's pattern (e.g. 'show me everything we caught on NFLX').",
"inputSchema": {
"properties": {
"limit": {
"default": 50,
"type": "integer"
},
"ticker": {
"description": "e.g. 'NFLX'",
"type": "string"
}
},
"required": [
"ticker"
],
"type": "object"
},
"name": "ticker_history"
},
{
"description": "Run an SPY-benchmarked backtest on the WAYBACK historical event dataset (2+ years, 13K events) instead of the recent live event dataset (2 months, 1.7K events). Much bigger samples for statistical confidence. Group by change_type / key_path / domain.",
"inputSchema": {
"properties": {
"exclude_noise": {
"default": true,
"description": "Filter out is_meta_noise=1 events",
"type": "boolean"
},
"group_by": {
"default": "key_path",
"description": "Dimension to slice on",
"enum": [
"change_type",
"key_path",
"key_name",
"parent_path",
"domain"
],
"type": "string"
},
"horizon_days": {
"default": 7,
"description": "Forward-return window",
"type": "integer"
},
"min_n": {
"default": 20,
"description": "Minimum sample size",
"type": "integer"
},
"since": {
"description": "YYYY-MM-DD lower bound on event date (default: when prices start)",
"type": "string"
},
"top_k": {
"default": 15,
"type": "integer"
}
},
"type": "object"
},
"name": "wayback_backtest"
},
{
"description": "Week-by-week wayback diff timeline for one domain. Returns every detected stack change (additions / removals) with week date. Use this to see when a vendor was added/removed historically, e.g. 'when did adobe.com add Segment?'",
"inputSchema": {
"properties": {
"change_type": {
"default": "any",
"enum": [
"added",
"removed",
"changed",
"any"
],
"type": "string"
},
"contains": {
"description": "Filter to events whose key_path or key_name contains this string (e.g. 'segment')",
"type": "string"
},
"domain": {
"description": "e.g. 'adobe.com'",
"type": "string"
},
"limit": {
"default": 100,
"type": "integer"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "domain_timeline"
},
{
"description": "ONE-SHOT cross-signal sweep. Computes \u03b1-vs-SPY stats simultaneously across event_type, detector, diff_field, severity, AND co_occurrence dimensions \u2014 returns the full landscape in a single response. Use this FIRST when you want to see where signal lives without having to call find_signals N times. Stateless, pure D1, no rate-limit risk, ~1s response. Cached per arg set for sub-100ms repeated queries.",
"inputSchema": {
"properties": {
"horizon_days": {
"default": 7,
"description": "Forward-return window (default 7)",
"type": "integer"
},
"min_n": {
"default": 20,
"description": "Sample-size floor per group",
"type": "integer"
},
"since": {
"description": "Optional YYYY-MM-DD lower bound on event date",
"type": "string"
},
"source": {
"default": "both",
"description": "Which event dataset to scan. 'live' = 1.7K recent. 'wayback' = 13K over 2 years. 'both' = run both and return side-by-side.",
"enum": [
"live",
"wayback",
"both"
],
"type": "string"
},
"top_k_per_dim": {
"default": 8,
"description": "Top K results per dimension (default 8)",
"type": "integer"
}
},
"type": "object"
},
"name": "signal_landscape"
},
{
"description": "Compare two signal patterns side-by-side. e.g. 'how does PRICING_TIERS_ADDED compare to VENDORS_DETECTED_CHANGED on the live dataset?' Returns \u03b1, %pos, sample size, worst/best trades for each, plus delta. Pure D1, fast.",
"inputSchema": {
"properties": {
"horizon_days": {
"default": 7,
"type": "integer"
},
"signal_a": {
"description": "First filter (same shape as test_filter args)",
"type": "object"
},
"signal_b": {
"description": "Second filter",
"type": "object"
}
},
"required": [
"signal_a",
"signal_b"
],
"type": "object"
},
"name": "signal_diff"
},
{
"description": "Bulk-farm a domain's historical wayback snapshots into our index. Use this when you need backtest history on a domain we haven't already farmed (i.e. wayback_backtest / domain_timeline return no data for it). Hits CDX \u2192 samples weekly \u2192 parallel-scans up to 50 snapshots via intel.boolsai.ai \u2192 inserts into wayback_intel_profiles. After farming completes you can call wayback_backtest or domain_timeline on the domain immediately. Cost: ~30-60s wall time, ~50 intel scans.",
"inputSchema": {
"properties": {
"domain": {
"description": "Bare domain, e.g. 'sweetgreen.com'",
"type": "string"
},
"max_snapshots": {
"default": 50,
"description": "Hard cap on snapshots to fetch (default 50; max 200)",
"type": "integer"
},
"weeks": {
"default": 26,
"description": "How many weeks of history to farm (default 26 = ~6 months; max 100)",
"type": "integer"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "farm_domain"
}
]
}
},
"bad_protocol_status_code": 200,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_session_id",
"missing_protocol_header",
"bad_protocol_not_rejected"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": false,
"transport": "streamable-http"
}
},
"remote_url": "https://signals.boolsai.ai/mcp",
"server_card_payload": null,
"server_identifier": "ai.boolsai/signals"
}
Known versions
1.0.0
Validation history
| Timestamp | Status | Score | Latency | Tools |
|---|---|---|---|---|
| May 20, 2026 02:22:13 PM UTC | Healthy | 70.0 | 206.0 ms | 12 |
| May 19, 2026 02:21:37 PM UTC | Healthy | 66.9 | 310.5 ms | 12 |
Validation timeline
| Validated | Summary | Score | Protocol | Auth mode | Tools | High-risk tools | Changes |
|---|---|---|---|---|---|---|---|
| May 20, 2026 02:22:13 PM UTC | Healthy | 70.0 | 2025-03-26 | public | 12 | 4 | none |
| May 19, 2026 02:21:37 PM UTC | Healthy | 66.9 | 2025-03-26 | public | 12 | 4 | none |
Recent validation runs
| Started | Status | Summary | Latency | Checks |
|---|---|---|---|---|
| May 20, 2026 02:22:13 PM UTC | Completed | Healthy | 206.0 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 19, 2026 02:21:36 PM UTC | Completed | Healthy | 310.5 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |