algochains-mcp-server 22.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- algochains_mcp_server-22.4.0/.env.example +245 -0
- algochains_mcp_server-22.4.0/.gitattributes +7 -0
- algochains_mcp_server-22.4.0/.github/workflows/mcp-regression-gate.yml +266 -0
- algochains_mcp_server-22.4.0/.github/workflows/release.yml +379 -0
- algochains_mcp_server-22.4.0/.gitignore +14 -0
- algochains_mcp_server-22.4.0/.windsurf/skills/mcporter-toolkit/SKILL.md +118 -0
- algochains_mcp_server-22.4.0/CHANGELOG.md +228 -0
- algochains_mcp_server-22.4.0/HIDDEN_KILLERS_AUDIT.md +329 -0
- algochains_mcp_server-22.4.0/INTEGRATION_README.md +449 -0
- algochains_mcp_server-22.4.0/LATENCY_GUIDE.md +180 -0
- algochains_mcp_server-22.4.0/LICENSE +21 -0
- algochains_mcp_server-22.4.0/MARKETPLACE_CREATOR_GUIDE.md +273 -0
- algochains_mcp_server-22.4.0/MEGA_PROMPT_PREDICTION_MARKETS_V1.md +37 -0
- algochains_mcp_server-22.4.0/MEGA_PROMPT_V22.md +508 -0
- algochains_mcp_server-22.4.0/Makefile +124 -0
- algochains_mcp_server-22.4.0/PKG-INFO +551 -0
- algochains_mcp_server-22.4.0/README.md +455 -0
- algochains_mcp_server-22.4.0/README_DRAFT.md +428 -0
- algochains_mcp_server-22.4.0/README_backup_20260522.md +1417 -0
- algochains_mcp_server-22.4.0/SAFETY_MODEL.md +248 -0
- algochains_mcp_server-22.4.0/UX_BLUEPRINT.md +283 -0
- algochains_mcp_server-22.4.0/algochains.ts +13656 -0
- algochains_mcp_server-22.4.0/algoclaw/README.md +58 -0
- algochains_mcp_server-22.4.0/algoclaw/agents/registry.json +1 -0
- algochains_mcp_server-22.4.0/algoclaw/cli.py +926 -0
- algochains_mcp_server-22.4.0/algoclaw/cron/schedule.json +1 -0
- algochains_mcp_server-22.4.0/algoclaw/memory/.gitkeep +0 -0
- algochains_mcp_server-22.4.0/algoclaw/skills/bot-health/SKILL.md +40 -0
- algochains_mcp_server-22.4.0/algoclaw/skills/cooldown-check/SKILL.md +35 -0
- algochains_mcp_server-22.4.0/algoclaw/skills/kill-switch/SKILL.md +56 -0
- algochains_mcp_server-22.4.0/algoclaw/skills/portfolio-optimize/SKILL.md +47 -0
- algochains_mcp_server-22.4.0/algoclaw/skills/position-size/SKILL.md +53 -0
- algochains_mcp_server-22.4.0/algoclaw/skills/prop-fund-check/SKILL.md +57 -0
- algochains_mcp_server-22.4.0/algoclaw/skills/security-posture/SKILL.md +56 -0
- algochains_mcp_server-22.4.0/algoclaw/skills/signal-health/SKILL.md +45 -0
- algochains_mcp_server-22.4.0/algoclaw/skills/stoploss-guard/SKILL.md +41 -0
- algochains_mcp_server-22.4.0/algoclaw/skills/thoughtproof-verify/SKILL.md +52 -0
- algochains_mcp_server-22.4.0/algoclaw/state/.gitkeep +0 -0
- algochains_mcp_server-22.4.0/blueprints/KALSHI_INTEGRATION_BLUEPRINT_V1.md +276 -0
- algochains_mcp_server-22.4.0/blueprints/PREDICTION_MARKETS_GAP_ANALYSIS.md +45 -0
- algochains_mcp_server-22.4.0/blueprints/PREDICTION_MARKET_BOTS_BLUEPRINT.md +65 -0
- algochains_mcp_server-22.4.0/blueprints/UPGRADE_BLUEPRINT_V22.md +254 -0
- algochains_mcp_server-22.4.0/blueprints/archive/PAI_INTEGRATION_BLUEPRINT.md +297 -0
- algochains_mcp_server-22.4.0/blueprints/archive/SKILLS_BRIDGE_BLUEPRINT.md +165 -0
- algochains_mcp_server-22.4.0/config/compliance_profiles.json +49 -0
- algochains_mcp_server-22.4.0/config/mcporter.json +28 -0
- algochains_mcp_server-22.4.0/config/profiles/eu_mifid2.json +51 -0
- algochains_mcp_server-22.4.0/config/profiles/us_institutional.json +45 -0
- algochains_mcp_server-22.4.0/config/profiles/us_retail_algo.json +42 -0
- algochains_mcp_server-22.4.0/config/stress_scenarios.json +51 -0
- algochains_mcp_server-22.4.0/deno.json +5 -0
- algochains_mcp_server-22.4.0/deno.lock +23 -0
- algochains_mcp_server-22.4.0/docs/ALGOCHAINS_MASTER_ROADMAP_MEGA_PROMPT.md +1712 -0
- algochains_mcp_server-22.4.0/docs/ALGOCHAINS_MEGA_BLUEPRINT_V2.md +442 -0
- algochains_mcp_server-22.4.0/docs/ALGOCHAINS_MEGA_BLUEPRINT_V2_PART2.md +949 -0
- algochains_mcp_server-22.4.0/docs/ALGOCHAINS_MEGA_BLUEPRINT_V2_PART3.md +865 -0
- algochains_mcp_server-22.4.0/docs/ALGOCHAINS_MEGA_PROMPT_V3.md +401 -0
- algochains_mcp_server-22.4.0/docs/AUDIT_LOG_20260510.md +234 -0
- algochains_mcp_server-22.4.0/docs/COMMS_STRATEGY.md +438 -0
- algochains_mcp_server-22.4.0/docs/DEVELOPER_TIER_ONBOARDING.md +212 -0
- algochains_mcp_server-22.4.0/docs/GOTCHAS_AND_BUGS.md +230 -0
- algochains_mcp_server-22.4.0/docs/INTEGRATION_README.md +449 -0
- algochains_mcp_server-22.4.0/docs/MASTER_BLUEPRINT_V4_V6.md +397 -0
- algochains_mcp_server-22.4.0/docs/MCPORTER_INTEGRATION_BLUEPRINT.md +487 -0
- algochains_mcp_server-22.4.0/docs/MCPORTER_INTEGRATION_BLUEPRINT_V2.md +788 -0
- algochains_mcp_server-22.4.0/docs/MCP_AUTH_AND_POLICY_MATRIX.md +30 -0
- algochains_mcp_server-22.4.0/docs/MCP_HTTP_BRIDGE_THREAT_MODEL.md +205 -0
- algochains_mcp_server-22.4.0/docs/MCP_PARITY_AND_AUTONOMOUS_GAP.md +81 -0
- algochains_mcp_server-22.4.0/docs/MCP_SERVER_ENHANCEMENT_ROADMAP.md +86 -0
- algochains_mcp_server-22.4.0/docs/MCP_TRACEABILITY_CONTRACT.md +92 -0
- algochains_mcp_server-22.4.0/docs/MEGAPROMPT_MCP_FIX.md +404 -0
- algochains_mcp_server-22.4.0/docs/SAFE_MODE_MATRIX.md +147 -0
- algochains_mcp_server-22.4.0/docs/TIER_REGISTRY_CHANGES.md +129 -0
- algochains_mcp_server-22.4.0/docs/TRADOVATE_PARITY.md +121 -0
- algochains_mcp_server-22.4.0/docs/V17_MULTI_BROKER_SCALING_BLUEPRINT.md +807 -0
- algochains_mcp_server-22.4.0/docs/V7_BYOK_KEY_ORCHESTRATOR_BLUEPRINT.md +372 -0
- algochains_mcp_server-22.4.0/docs/V8_STRATEGY_BUILDER_SOCIAL_TRADING_BLUEPRINT.md +492 -0
- algochains_mcp_server-22.4.0/docs/V9_RISK_DASHBOARD_COMPLIANCE_WHITELABEL_BLUEPRINT.md +754 -0
- algochains_mcp_server-22.4.0/examples/trade_propagation/TRADE_PROPAGATION.md +21 -0
- algochains_mcp_server-22.4.0/examples/trade_propagation/dummy_signal_test.py +32 -0
- algochains_mcp_server-22.4.0/examples/trade_propagation/send_signal.py +77 -0
- algochains_mcp_server-22.4.0/homebrew/algochains.rb +94 -0
- algochains_mcp_server-22.4.0/man/man1/algochains.1 +265 -0
- algochains_mcp_server-22.4.0/migrations/v10_v16_schema.sql +592 -0
- algochains_mcp_server-22.4.0/migrations/v8_v9_schema.sql +299 -0
- algochains_mcp_server-22.4.0/packages/sdk/package.json +36 -0
- algochains_mcp_server-22.4.0/packages/sdk/src/client.d.ts +142 -0
- algochains_mcp_server-22.4.0/packages/sdk/src/index.js +37 -0
- algochains_mcp_server-22.4.0/packages/sdk/src/types.d.ts +1404 -0
- algochains_mcp_server-22.4.0/pyproject.toml +101 -0
- algochains_mcp_server-22.4.0/registry.json +86 -0
- algochains_mcp_server-22.4.0/scripts/algochains +118 -0
- algochains_mcp_server-22.4.0/scripts/algochains.ps1 +111 -0
- algochains_mcp_server-22.4.0/scripts/demo_algochains.sh +33 -0
- algochains_mcp_server-22.4.0/scripts/install.sh +196 -0
- algochains_mcp_server-22.4.0/scripts/install_on_desktop.sh +148 -0
- algochains_mcp_server-22.4.0/scripts/quickstart.py +629 -0
- algochains_mcp_server-22.4.0/scripts/run_bandit.sh +41 -0
- algochains_mcp_server-22.4.0/scripts/secret_scan.py +131 -0
- algochains_mcp_server-22.4.0/scripts/setup_cc_tunnel.sh +114 -0
- algochains_mcp_server-22.4.0/scripts/startup_health_check.py +429 -0
- algochains_mcp_server-22.4.0/scripts/test_cli_20.sh +90 -0
- algochains_mcp_server-22.4.0/skills/blueprint-executor.ts +97 -0
- algochains_mcp_server-22.4.0/skills/bot-health-monitor.ts +104 -0
- algochains_mcp_server-22.4.0/skills/contract-rollover-handler.ts +135 -0
- algochains_mcp_server-22.4.0/skills/deploy-bot-changes.ts +85 -0
- algochains_mcp_server-22.4.0/skills/institutional-flow-analysis.ts +109 -0
- algochains_mcp_server-22.4.0/skills/mcpt-pipeline-ops.ts +90 -0
- algochains_mcp_server-22.4.0/skills/money-blender-ops.ts +80 -0
- algochains_mcp_server-22.4.0/skills/morning-health-brief.ts +87 -0
- algochains_mcp_server-22.4.0/skills/strategy-vault-tracker.ts +77 -0
- algochains_mcp_server-22.4.0/skills/system-audit-fix.ts +119 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/__init__.py +13 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/account_protection/__init__.py +49 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/account_protection/engine.py +296 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/account_protection/guards.py +636 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/account_protection/protection_patterns.py +468 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/agent_memory.py +345 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/agent_swarm/__init__.py +16 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/agent_swarm/agent_memory.py +44 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/agent_swarm/agent_monitor.py +57 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/agent_swarm/agent_orchestrator.py +78 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/agent_swarm/consensus_engine.py +47 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/agent_swarm/task_planner.py +39 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/agent_swarm/tool_router.py +68 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alpha_engines/__init__.py +15 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alpha_engines/congressional.py +174 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alpha_engines/cross_asset.py +236 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alpha_engines/dark_pool_engine.py +169 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alpha_engines/gex_engine.py +172 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alpha_engines/kelly_engine.py +167 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alpha_engines/options_flow.py +152 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alpha_engines/tape_reader.py +185 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alpha_engines/vol_surface.py +216 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alpha_engines/vwap_engine.py +143 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alt_data/__init__.py +16 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alt_data/alt_data_marketplace.py +49 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alt_data/satellite_engine.py +40 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alt_data/sec_filing_engine.py +58 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alt_data/sentiment_engine.py +56 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alt_data/social_media_engine.py +53 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/alt_data/web_scraper.py +49 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/auth/__init__.py +1 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/auth/agent_provisioner.py +358 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/auth/api_keys.py +85 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/auth/key_vault.py +354 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/auth/password_reset.py +301 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/auth/supabase_sso.py +132 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/__init__.py +14 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/alpaca_connector.py +202 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/base.py +254 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/credential_vault.py +429 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/crypto_perps.py +387 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/etrade_connector.py +655 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/ibkr_connector.py +194 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/oanda_connector.py +213 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/oauth_manager.py +552 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/prop_fund_autopilot.py +521 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/prop_fund_data_feeder.py +603 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/prop_fund_drawdown_monitor.py +547 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/prop_fund_manager.py +1066 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/quantconnect_connector.py +206 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/registry.py +88 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/rithmic_connector.py +533 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/schwab_connector.py +327 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/traderspost_connector.py +192 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/brokers/tradovate.py +780 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/__init__.py +18 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/data_warehouse.py +180 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/paper_trading_graduation.py +508 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/signal_tester.py +314 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/strategy_runner.py +250 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/submission_pipeline.py +400 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/templates/__init__.py +1 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/templates/bollinger_breakout.py +160 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/templates/ema_pullback.py +129 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/templates/registry.py +116 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/templates/rsi_mean_reversion.py +121 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/builder_sdk/templates/sma_crossover.py +111 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/byok/__init__.py +1 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/byok/key_orchestrator.py +696 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/byok/provider_registry.py +299 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/cli_contract.py +29 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/cloud_saas/__init__.py +14 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/cloud_saas/api_gateway.py +80 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/cloud_saas/billing_engine.py +552 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/cloud_saas/strategy_marketplace.py +143 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/cloud_saas/tenant_manager.py +235 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/cloud_saas/tenant_middleware.py +386 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/cloud_saas/white_label_engine.py +99 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/community_signals/__init__.py +5 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/community_signals/engine.py +101 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/compliance/__init__.py +3 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/compliance/engine.py +270 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/config.py +210 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/dashboard/__init__.py +6 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/dashboard/live_dashboard.py +349 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/data_ingestion.py +593 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/data_providers/__init__.py +22 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/data_providers/alpha_vantage_provider.py +141 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/data_providers/base.py +189 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/data_providers/finnhub_provider.py +131 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/data_providers/massive_whitelabel.py +877 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/data_providers/polygon_provider.py +131 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/data_providers/registry.py +89 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/data_providers/twelve_data_provider.py +110 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/data_providers/yahoo_provider.py +117 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/datasets/__init__.py +1 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/datasets/builder.py +717 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/defi_engine/__init__.py +16 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/defi_engine/bridge_engine.py +62 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/defi_engine/defi_risk_engine.py +68 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/defi_engine/dex_aggregator.py +109 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/defi_engine/governance_engine.py +48 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/defi_engine/mev_protector.py +53 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/defi_engine/staking.py +363 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/defi_engine/yield_optimizer.py +59 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/developer_auth.py +149 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/developer_rate_limiter.py +204 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/developer_tools.py +158 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/dynamic_toolsets/__init__.py +15 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/dynamic_toolsets/gateway.py +363 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/errors.py +181 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/evolution/__init__.py +23 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/evolution/evolution_daemon.py +382 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/evolution/lessons_injector.py +162 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/evolution/reward_model.py +232 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/evolution/trade_memory.py +323 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/execution_engine/__init__.py +16 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/execution_engine/algo_executor.py +60 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/execution_engine/dca_engine.py +325 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/execution_engine/fix_gateway.py +55 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/execution_engine/order_manager.py +81 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/execution_engine/smart_order_router.py +55 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/execution_engine/tca_engine.py +78 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/execution_engine/venue_manager.py +65 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/graphiti_intelligence/__init__.py +17 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/graphiti_intelligence/client.py +128 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/http_bridge.py +1106 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/http_transport.py +361 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/intent_engine/__init__.py +41 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/intent_engine/arbitrage_detector.py +228 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/intent_engine/constraint_solver.py +434 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/intent_engine/intent_parser.py +286 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/intent_engine/plan_executor.py +147 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/intent_engine/predictive_prefetch.py +166 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/intent_engine/regime_detector.py +307 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/intent_engine/shadow_portfolio.py +300 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/intent_engine/strategy_evolution.py +308 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/learning_signals.py +328 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/live_bot_intelligence/__init__.py +50 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/live_bot_intelligence/academic_registry.py +369 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/live_bot_intelligence/bot_ops.py +533 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/live_bot_intelligence/heartbeat.py +140 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/live_bot_intelligence/metrics_parser.py +396 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/live_bot_intelligence/multi_account_metrics.py +500 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/marketplace/__init__.py +1 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/marketplace/bridge.py +192 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/marketplace/supabase_tools.py +387 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/marketplace/validator.py +250 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/memory_safety.py +251 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/middleware.py +471 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/ml_engine/__init__.py +16 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/ml_engine/feature_engine.py +70 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/ml_engine/gpu_dispatcher.py +116 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/ml_engine/llm_strategy_gen.py +55 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/ml_engine/model_registry.py +93 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/ml_engine/model_trainer.py +91 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/ml_engine/rl_agent.py +77 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/multi_tenant/__init__.py +3 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/multi_tenant/engine.py +175 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/notifications/__init__.py +1 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/notifications/ntfy_push.py +240 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/notifications/push.py +336 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/onboarding.py +845 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/onyx_intelligence/__init__.py +35 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/onyx_intelligence/onyx_client.py +292 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/__init__.py +12 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/cumulative_delta.py +264 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/dark_pool_volume.py +374 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/earnings_catalyst.py +377 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/footprint.py +237 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/kalshi_ai_ensemble.py +461 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/kalshi_category_scorer.py +238 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/kalshi_events_scanner.py +280 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/kalshi_pipeline.py +408 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/kalshi_safe_compounder.py +305 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/kalshi_signed.py +314 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/kalshi_slack_notifier.py +277 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/kalshi_stat_arb.py +257 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/kalshi_strategy_engine.py +704 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/kalshi_websocket.py +287 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/macro_signals.py +391 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/prediction_markets.py +907 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/order_flow/volume_profile.py +266 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/otel_tracing.py +191 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/paths.py +120 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/performance_reports.py +273 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/platform_analytics.py +302 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/portfolio/__init__.py +1 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/portfolio/optimizer.py +274 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/prediction_market_metrics.py +108 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/quant_alpha/__init__.py +16 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/quant_alpha/factor_model.py +263 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/quant_alpha/regime_hmm.py +253 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/quant_alpha/volatility_surface.py +306 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/realtime_analytics/__init__.py +14 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/realtime_analytics/alert_engine.py +58 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/realtime_analytics/microstructure.py +211 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/realtime_analytics/order_flow_analyzer.py +230 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/realtime_analytics/pnl_streamer.py +47 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/realtime_analytics/regime_detector.py +252 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/risk_dashboard/__init__.py +3 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/risk_dashboard/engine.py +174 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/security/__init__.py +0 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/security/guardrail.py +232 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/security/per_tool_rate_limiter.py +172 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/security/replay_guard.py +222 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/server.py +11275 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/skills_registry.py +375 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/social_trading/__init__.py +5 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/social_trading/copy_engine.py +322 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/social_trading/engine.py +257 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/spec_compliance/__init__.py +14 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/spec_compliance/elicitation.py +239 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/spec_compliance/subscriptions.py +241 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/spec_compliance/tasks.py +275 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/sse_server.py +567 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/strategy_builder/__init__.py +18 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/strategy_builder/backtest_runner.py +181 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/strategy_builder/deployer.py +157 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/strategy_builder/optimizer.py +186 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/strategy_builder/spec.py +224 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/strategy_builder/template_manager.py +296 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/strategy_builder/walk_forward.py +211 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/streaming/__init__.py +1 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/streaming/alert_engine.py +326 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/streaming/earnings_calendar.py +343 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/streaming/manager.py +161 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/subscriber_auth.py +151 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/subscriber_tools.py +381 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/support_tickets.py +486 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/telos.py +216 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tool_danger_tiers.py +487 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tool_manifest.py +232 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tool_policy.py +350 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tools/__init__.py +1 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/__init__.py +1 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/numerai/__init__.py +35 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/numerai/config.py +154 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/numerai/download.py +192 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/numerai/era_utils.py +160 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/numerai/model_zoo.py +310 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/numerai/monitoring.py +266 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/numerai/neutralize.py +159 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/numerai/run_pipeline.py +341 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/numerai/submit.py +207 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/numerai/train.py +226 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/tournament/numerai/validate.py +145 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/trade_propagation.py +271 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/trading_guardrails.py +667 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/us_economics.py +463 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/verification.py +427 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/volatility_targeting.py +386 -0
- algochains_mcp_server-22.4.0/src/algochains_mcp/waitlist.py +347 -0
- algochains_mcp_server-22.4.0/src/cli/package.json +36 -0
- algochains_mcp_server-22.4.0/src/cli/src/auth.ts +207 -0
- algochains_mcp_server-22.4.0/src/cli/src/commands/auth_cmd.ts +158 -0
- algochains_mcp_server-22.4.0/src/cli/src/commands/completion.ts +332 -0
- algochains_mcp_server-22.4.0/src/cli/src/commands/daemon.ts +301 -0
- algochains_mcp_server-22.4.0/src/cli/src/commands/doctor.ts +340 -0
- algochains_mcp_server-22.4.0/src/cli/src/commands/killswitch.ts +59 -0
- algochains_mcp_server-22.4.0/src/cli/src/config.ts +186 -0
- algochains_mcp_server-22.4.0/src/cli/src/index.ts +342 -0
- algochains_mcp_server-22.4.0/src/cli/src/mcp_client.ts +74 -0
- algochains_mcp_server-22.4.0/src/cli/src/plugins/manager.ts +199 -0
- algochains_mcp_server-22.4.0/src/cli/src/repl/App.tsx +391 -0
- algochains_mcp_server-22.4.0/src/cli/src/triggers/manager.ts +208 -0
- algochains_mcp_server-22.4.0/src/cli/src/trust.ts +197 -0
- algochains_mcp_server-22.4.0/src/cli/tsconfig.json +16 -0
- algochains_mcp_server-22.4.0/src/stripe_app/server.py +179 -0
- algochains_mcp_server-22.4.0/state/guardrails_state.json +26 -0
- algochains_mcp_server-22.4.0/state/guardrails_state.json.bak.20260511_173139 +26 -0
- algochains_mcp_server-22.4.0/state/onboarding_state.json +12 -0
- algochains_mcp_server-22.4.0/supabase/.gitignore +8 -0
- algochains_mcp_server-22.4.0/supabase/config.toml +411 -0
- algochains_mcp_server-22.4.0/supabase/functions/_shared/waitlist_notify.ts +411 -0
- algochains_mcp_server-22.4.0/supabase/functions/_shared/waitlist_notify_test.ts +222 -0
- algochains_mcp_server-22.4.0/supabase/functions/waitlist-slack-notify/README.md +95 -0
- algochains_mcp_server-22.4.0/supabase/functions/waitlist-slack-notify/index.ts +3 -0
- algochains_mcp_server-22.4.0/supabase/migrations/20260406_platform_tables.sql +248 -0
- algochains_mcp_server-22.4.0/supabase/migrations/20260409_owner_bot_live_view.sql +54 -0
- algochains_mcp_server-22.4.0/supabase/migrations/20260512061320_waitlist_slack_constraints.sql +0 -0
- algochains_mcp_server-22.4.0/supabase/migrations/20260512061500_waitlist_slack_constraints.sql +24 -0
- algochains_mcp_server-22.4.0/supabase/migrations/20260512063500_waitlist_slack_webhook_triggers.sql +80 -0
- algochains_mcp_server-22.4.0/supabase/migrations/20260522_payment_tables.sql +310 -0
- algochains_mcp_server-22.4.0/tests/__init__.py +1 -0
- algochains_mcp_server-22.4.0/tests/conftest.py +210 -0
- algochains_mcp_server-22.4.0/tests/live/test_live_audit.py +104 -0
- algochains_mcp_server-22.4.0/tests/numerai/__init__.py +1 -0
- algochains_mcp_server-22.4.0/tests/numerai/conftest.py +124 -0
- algochains_mcp_server-22.4.0/tests/numerai/test_era_utils.py +126 -0
- algochains_mcp_server-22.4.0/tests/numerai/test_mcp_tools.py +156 -0
- algochains_mcp_server-22.4.0/tests/numerai/test_neutralize.py +118 -0
- algochains_mcp_server-22.4.0/tests/numerai/test_submit_validation.py +182 -0
- algochains_mcp_server-22.4.0/tests/test_account_protection.py +195 -0
- algochains_mcp_server-22.4.0/tests/test_bot_health_signal_slice.py +240 -0
- algochains_mcp_server-22.4.0/tests/test_bot_health_v22_extensions.py +278 -0
- algochains_mcp_server-22.4.0/tests/test_bridge.py +106 -0
- algochains_mcp_server-22.4.0/tests/test_builder_sdk.py +158 -0
- algochains_mcp_server-22.4.0/tests/test_developer_auth.py +135 -0
- algochains_mcp_server-22.4.0/tests/test_developer_rate_limiter.py +113 -0
- algochains_mcp_server-22.4.0/tests/test_developer_tools.py +81 -0
- algochains_mcp_server-22.4.0/tests/test_dynamic_dispatch_safety.py +269 -0
- algochains_mcp_server-22.4.0/tests/test_errors.py +94 -0
- algochains_mcp_server-22.4.0/tests/test_hidden_killer_mcp_parity.py +38 -0
- algochains_mcp_server-22.4.0/tests/test_http_bridge_auth.py +239 -0
- algochains_mcp_server-22.4.0/tests/test_http_bridge_developer_auth.py +168 -0
- algochains_mcp_server-22.4.0/tests/test_http_bridge_scope.py +298 -0
- algochains_mcp_server-22.4.0/tests/test_latency_payload.py +147 -0
- algochains_mcp_server-22.4.0/tests/test_live_audit.py +154 -0
- algochains_mcp_server-22.4.0/tests/test_memory_safety.py +77 -0
- algochains_mcp_server-22.4.0/tests/test_middleware.py +161 -0
- algochains_mcp_server-22.4.0/tests/test_quant_regime_state.py +160 -0
- algochains_mcp_server-22.4.0/tests/test_tool_danger_contract.py +148 -0
- algochains_mcp_server-22.4.0/tests/test_tool_manifest.py +79 -0
- algochains_mcp_server-22.4.0/tests/test_tool_policy.py +124 -0
- algochains_mcp_server-22.4.0/tests/test_tool_registration.py +229 -0
- algochains_mcp_server-22.4.0/tests/test_traceability_contract.py +116 -0
- algochains_mcp_server-22.4.0/tests/test_tradovate_governance.py +132 -0
- algochains_mcp_server-22.4.0/tests/test_v10_v16_modules.py +1110 -0
- algochains_mcp_server-22.4.0/tests/test_v8_v9_modules.py +440 -0
- algochains_mcp_server-22.4.0/tests/test_validator.py +140 -0
- algochains_mcp_server-22.4.0/tests/test_waitlist_env.py +16 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# ═══════════════════════════════════════════════════════════════
|
|
2
|
+
# AlgoChains MCP Server v20 — Environment Configuration
|
|
3
|
+
# Copy to .env and fill in your credentials
|
|
4
|
+
# Run "python scripts/startup_health_check.py" to verify setup
|
|
5
|
+
#
|
|
6
|
+
# Tier structure:
|
|
7
|
+
# Free → Yahoo Finance data, backtest templates
|
|
8
|
+
# $49/mo → Polygon, Alpha Vantage, full strategy builder
|
|
9
|
+
# $199/mo → Builder SDK, Supabase data warehouse, marketplace submission
|
|
10
|
+
# $499/mo → Institutional execution, FIX gateway, white-label
|
|
11
|
+
# ═══════════════════════════════════════════════════════════════
|
|
12
|
+
|
|
13
|
+
# ── AlgoChains Platform ─────────────────────────────────────────
|
|
14
|
+
# Get your API key from https://algochains.ai/dashboard
|
|
15
|
+
ALGOCHAINS_API_KEY=
|
|
16
|
+
ALGOCHAINS_DJANGO_URL=https://algochains.ai
|
|
17
|
+
|
|
18
|
+
# ── Builder SDK ($199/mo tier) ───────────────────────────────────
|
|
19
|
+
# Enables: Supabase data warehouse, marketplace submission, paper trading monitor
|
|
20
|
+
# Get from: https://algochains.ai/dashboard/builder
|
|
21
|
+
ALGOCHAINS_BUILDER_KEY=
|
|
22
|
+
|
|
23
|
+
# ── Signal HMAC Security (Django trade propagation — Roo architecture) ──
|
|
24
|
+
# REQUIRED for paper trading and live mode signal propagation.
|
|
25
|
+
# Minimum 32 characters. Generate with: python3 -c "import secrets; print(secrets.token_hex(32))"
|
|
26
|
+
# This secret signs every signal so Django can verify authenticity.
|
|
27
|
+
ALGOCHAINS_SIGNAL_SECRET=
|
|
28
|
+
# Full ingest URL (HTTPS). MCP tool: propagate_trade_signal
|
|
29
|
+
ALGOCHAINS_SIGNAL_URL=
|
|
30
|
+
# Legacy aliases (also accepted by trade_propagation.py and examples/trade_propagation/send_signal.py)
|
|
31
|
+
SIGNAL_SECRET=
|
|
32
|
+
SIGNAL_URL=
|
|
33
|
+
|
|
34
|
+
# ── AlgoChains Marketplace API Keys ──────────────────────────────
|
|
35
|
+
# For publishing and updating strategy listings.
|
|
36
|
+
LISTING_API_KEY=
|
|
37
|
+
METRICS_INGEST_API_KEY=
|
|
38
|
+
# CI / production: require both keys in startup_health_check.py
|
|
39
|
+
# ALGOCHAINS_MARKETPLACE_STRICT=1
|
|
40
|
+
# Local dev only (disables fail-fast in MarketplaceBridge — do not use in prod):
|
|
41
|
+
# ALGOCHAINS_SKIP_MARKETPLACE_KEY_CHECK=1
|
|
42
|
+
|
|
43
|
+
# ── Supabase (Marketplace DB + Platform Tables) ───────────────────
|
|
44
|
+
# Main project: trkpzsnwjtmvgppuzlwu (marketplace listings, subscriptions)
|
|
45
|
+
SUPABASE_URL=
|
|
46
|
+
SUPABASE_ANON_KEY=
|
|
47
|
+
SUPABASE_SERVICE_KEY= # Service role key for server-side writes (tickets, oauth tokens, analytics)
|
|
48
|
+
SUPABASE_SERVICE_ROLE_KEY= # Alias used by waitlist.py; set to the same value as SUPABASE_SERVICE_KEY
|
|
49
|
+
SUPABASE_RESET_REDIRECT_URL=https://algochains.ai/auth/reset-password
|
|
50
|
+
|
|
51
|
+
# ── Email (Resend) ────────────────────────────────────────────────
|
|
52
|
+
# https://resend.com — used for support tickets, waitlist, verification codes
|
|
53
|
+
RESEND_API_KEY=
|
|
54
|
+
SUPPORT_FROM_EMAIL=support@algochains.ai
|
|
55
|
+
WAITLIST_FROM_EMAIL=waitlist@algochains.ai
|
|
56
|
+
VERIFICATION_FROM_EMAIL=noreply@algochains.ai
|
|
57
|
+
SUPPORT_EMAIL=support@algochains.ai
|
|
58
|
+
|
|
59
|
+
# ── SMS (Twilio) — optional, enables SMS verification codes ───────
|
|
60
|
+
# https://console.twilio.com
|
|
61
|
+
TWILIO_ACCOUNT_SID=
|
|
62
|
+
TWILIO_AUTH_TOKEN=
|
|
63
|
+
TWILIO_FROM_NUMBER= # E.164 format: +15551234567
|
|
64
|
+
|
|
65
|
+
# ── Notion Integration — optional, syncs support tickets ─────────
|
|
66
|
+
NOTION_API_KEY=
|
|
67
|
+
NOTION_SUPPORT_DB_ID= # Notion database ID for support tickets
|
|
68
|
+
|
|
69
|
+
# ── Charles Schwab (TD Ameritrade successor) ──────────────────────
|
|
70
|
+
# https://developer.schwab.com/products/trader-api--individual-
|
|
71
|
+
SCHWAB_CLIENT_ID=
|
|
72
|
+
SCHWAB_CLIENT_SECRET=
|
|
73
|
+
SCHWAB_ACCESS_TOKEN= # Set after completing OAuth flow
|
|
74
|
+
SCHWAB_ACCOUNT_HASH= # Auto-populated on first connect
|
|
75
|
+
SCHWAB_PAPER=false
|
|
76
|
+
|
|
77
|
+
# ── Kalshi (prediction markets — RSA signed REST) ────────────────
|
|
78
|
+
# https://docs.kalshi.com/getting_started/api_keys
|
|
79
|
+
KALSHI_ACCESS_KEY=
|
|
80
|
+
KALSHI_PRIVATE_KEY_PATH= # Path to PEM private key (chmod 600)
|
|
81
|
+
# Or inline PEM for containers (avoid in production):
|
|
82
|
+
# KALSHI_PRIVATE_KEY_PEM=
|
|
83
|
+
# Production default: https://api.elections.kalshi.com — override for demo:
|
|
84
|
+
# KALSHI_API_HOST=https://demo-api.kalshi.co
|
|
85
|
+
|
|
86
|
+
# ── Polymarket CLOB (optional — for authenticated trading only) ───
|
|
87
|
+
POLYMARKET_API_KEY=
|
|
88
|
+
POLYMARKET_API_SECRET=
|
|
89
|
+
POLYMARKET_PASSPHRASE=
|
|
90
|
+
|
|
91
|
+
# ── OAuth General Settings ────────────────────────────────────────
|
|
92
|
+
ALGOCHAINS_OAUTH_REDIRECT_URI=https://algochains.ai/oauth/callback
|
|
93
|
+
|
|
94
|
+
# ── HTTP Transport Security ───────────────────────────────────────
|
|
95
|
+
# Bearer token for the HTTP/SSE transport (algochains-mcp-http).
|
|
96
|
+
# Set this to secure remote agent connections.
|
|
97
|
+
# Generate with: python3 -c "import secrets; print(secrets.token_hex(32))"
|
|
98
|
+
ALGOCHAINS_HTTP_TRANSPORT_SECRET=
|
|
99
|
+
# Allowed CORS origins for HTTP transport (comma-separated, * = all)
|
|
100
|
+
ALGOCHAINS_HTTP_CORS_ORIGINS=*
|
|
101
|
+
|
|
102
|
+
# ── Account Protection Preset ────────────────────────────────────
|
|
103
|
+
# Options: conservative | moderate | aggressive
|
|
104
|
+
# conservative: VIX>25 kill, daily loss $200, drawdown 8%
|
|
105
|
+
# moderate: VIX>35 kill, daily loss $500, drawdown 15% ← recommended
|
|
106
|
+
# aggressive: VIX>45 kill, daily loss $2000, drawdown 25%
|
|
107
|
+
ALGOCHAINS_PROTECTION_PRESET=moderate
|
|
108
|
+
|
|
109
|
+
# ═══════════════════════════════════════════════════════════════
|
|
110
|
+
# BROKERS — Fill in at least one for live trading
|
|
111
|
+
# ═══════════════════════════════════════════════════════════════
|
|
112
|
+
|
|
113
|
+
# ── Tradovate (Futures — MNQ, CL, MES, NQ, ES) ────────────────
|
|
114
|
+
TRADOVATE_USERNAME=
|
|
115
|
+
TRADOVATE_PASSWORD=
|
|
116
|
+
TRADOVATE_APP_ID=
|
|
117
|
+
TRADOVATE_CID=
|
|
118
|
+
TRADOVATE_SECRET=
|
|
119
|
+
TRADOVATE_DEVICE_ID=
|
|
120
|
+
# Environment: demo | live
|
|
121
|
+
TRADOVATE_ENVIRONMENT=demo
|
|
122
|
+
|
|
123
|
+
# ── Alpaca (Equities — stocks, ETFs) ─────────────────────────
|
|
124
|
+
ALPACA_API_KEY=
|
|
125
|
+
ALPACA_SECRET_KEY=
|
|
126
|
+
# https://paper-api.alpaca.markets (paper) | https://api.alpaca.markets (live)
|
|
127
|
+
ALPACA_BASE_URL=https://paper-api.alpaca.markets
|
|
128
|
+
|
|
129
|
+
# ── Interactive Brokers (TWS must be running) ────────────────
|
|
130
|
+
IBKR_HOST=127.0.0.1
|
|
131
|
+
IBKR_PORT=7497
|
|
132
|
+
IBKR_CLIENT_ID=1
|
|
133
|
+
|
|
134
|
+
# ── OANDA (Forex) ────────────────────────────────────────────
|
|
135
|
+
OANDA_ACCOUNT_ID=
|
|
136
|
+
OANDA_ACCESS_TOKEN=
|
|
137
|
+
# practice | live
|
|
138
|
+
OANDA_ENVIRONMENT=practice
|
|
139
|
+
|
|
140
|
+
# ── TradersPost.io (Webhook Meta-Router) ─────────────────────
|
|
141
|
+
# Routes signals to: Schwab, Robinhood, Tastytrade, TradeStation,
|
|
142
|
+
# Tradier, Coinbase, Kraken, Bitget, ByBit
|
|
143
|
+
TRADERSPOST_WEBHOOK_URL=
|
|
144
|
+
TRADERSPOST_API_KEY=
|
|
145
|
+
|
|
146
|
+
# ── QuantConnect (LEAN Algorithm Platform) ───────────────────
|
|
147
|
+
QUANTCONNECT_USER_ID=
|
|
148
|
+
QUANTCONNECT_API_TOKEN=
|
|
149
|
+
|
|
150
|
+
# ═══════════════════════════════════════════════════════════════
|
|
151
|
+
# DATA PROVIDERS — Pick any you want (Yahoo Finance = free, no key)
|
|
152
|
+
# ═══════════════════════════════════════════════════════════════
|
|
153
|
+
|
|
154
|
+
# ── Polygon.io (Stocks, Options, Forex, Crypto) ─────────────────
|
|
155
|
+
# Free: 5/min | $29/mo: unlimited | https://polygon.io
|
|
156
|
+
POLYGON_API_KEY=
|
|
157
|
+
|
|
158
|
+
# ── Alpha Vantage (Stocks, Forex, Crypto, 110+ technicals) ─────
|
|
159
|
+
# Free: 25/day | $49.99/mo: 75/min | https://alphavantage.co
|
|
160
|
+
ALPHA_VANTAGE_API_KEY=
|
|
161
|
+
|
|
162
|
+
# ── Finnhub (Quotes, news, earnings, insider trades, SEC) ───────
|
|
163
|
+
# Free: 60/min | $49/mo: 300/min | https://finnhub.io
|
|
164
|
+
FINNHUB_API_KEY=
|
|
165
|
+
|
|
166
|
+
# ── Twelve Data (800+ exchanges, stocks/forex/crypto) ───────────
|
|
167
|
+
# Free: 800 credits/day | $29/mo | https://twelvedata.com
|
|
168
|
+
TWELVE_DATA_API_KEY=
|
|
169
|
+
|
|
170
|
+
# ── Databento (Tick Data / L2 Book — institutional) ─────────────
|
|
171
|
+
# Professional-grade tick data, L2 order book, futures
|
|
172
|
+
# No free tier | https://databento.com
|
|
173
|
+
DATABENTO_API_KEY=
|
|
174
|
+
|
|
175
|
+
# ── Unusual Whales (Options Flow / Dark Pool) ────────────────────
|
|
176
|
+
# Options flow, dark pool prints, GEX, DIX
|
|
177
|
+
# $57/mo | https://unusualwhales.com
|
|
178
|
+
UNUSUAL_WHALES_API_KEY=
|
|
179
|
+
|
|
180
|
+
# ── Intrinio (Fundamentals / Options Data) ───────────────────────
|
|
181
|
+
# Company fundamentals, options chains, institutional holdings
|
|
182
|
+
# Free trial | https://intrinio.com
|
|
183
|
+
INTRINIO_API_KEY=
|
|
184
|
+
|
|
185
|
+
# ── Nasdaq Data Link / Quandl (Economic / Macro) ────────────────
|
|
186
|
+
QUANDL_API_KEY=
|
|
187
|
+
|
|
188
|
+
# ── OpenBB (Aggregated Multi-Source) ─────────────────────────────
|
|
189
|
+
OPENBB_PAT=
|
|
190
|
+
|
|
191
|
+
# ═══════════════════════════════════════════════════════════════
|
|
192
|
+
# NOTIFICATIONS (Optional — get alerts on your phone/Slack)
|
|
193
|
+
# ═══════════════════════════════════════════════════════════════
|
|
194
|
+
|
|
195
|
+
# ── Slack ──────────────────────────────────────────────────────
|
|
196
|
+
SLACK_BOT_TOKEN=
|
|
197
|
+
SLACK_CHANNEL_ID=C0A075W6D4H
|
|
198
|
+
WAITLIST_NOTIFY_SECRET= # Generate with: python3 -c "import secrets; print(secrets.token_hex(24))"
|
|
199
|
+
SLACK_WEBHOOK_URL=
|
|
200
|
+
# For signal routing alerts to #tradovate-futures-bot-changelog
|
|
201
|
+
SLACK_CHANNEL_SIGNAL_ALERTS=#tradovate-futures-bot-changelog
|
|
202
|
+
|
|
203
|
+
# ── Discord ────────────────────────────────────────────────────
|
|
204
|
+
DISCORD_WEBHOOK_URL=
|
|
205
|
+
|
|
206
|
+
# ── Telegram ───────────────────────────────────────────────────
|
|
207
|
+
TELEGRAM_BOT_TOKEN=
|
|
208
|
+
TELEGRAM_CHAT_ID=
|
|
209
|
+
|
|
210
|
+
# ── Firebase Cloud Messaging (Mobile Push) ─────────────────────
|
|
211
|
+
FCM_SERVER_KEY=
|
|
212
|
+
|
|
213
|
+
# ── Email (SendGrid / Resend) ──────────────────────────────────
|
|
214
|
+
EMAIL_API_KEY=
|
|
215
|
+
|
|
216
|
+
# ═══════════════════════════════════════════════════════════════
|
|
217
|
+
# ADVANCED — Only needed for institutional/V14+ features
|
|
218
|
+
# ═══════════════════════════════════════════════════════════════
|
|
219
|
+
|
|
220
|
+
# ── OpenAI (LLM Strategy Generator, Intent Engine) ─────────────
|
|
221
|
+
OPENAI_API_KEY=
|
|
222
|
+
|
|
223
|
+
# ── Anthropic (Claude for strategy analysis) ───────────────────
|
|
224
|
+
ANTHROPIC_API_KEY=
|
|
225
|
+
|
|
226
|
+
# ── Onyx Knowledge Base ─────────────────────────────────────────
|
|
227
|
+
# Self-hosted RAG over AlgoChains docs, strategies, Slack archives
|
|
228
|
+
ONYX_API_KEY=
|
|
229
|
+
ONYX_API_URL=http://100.89.114.31:8080
|
|
230
|
+
|
|
231
|
+
# ── PostgreSQL (Moltbook debate engine) ─────────────────────────
|
|
232
|
+
MOLTBOOK_DB_URL=postgresql://algochains:@127.0.0.1:5434/moltbook
|
|
233
|
+
|
|
234
|
+
# ── Redis ────────────────────────────────────────────────────────
|
|
235
|
+
REDIS_URL=redis://127.0.0.1:6380
|
|
236
|
+
|
|
237
|
+
# ── AWS (S3 tick data backup) ────────────────────────────────────
|
|
238
|
+
AWS_ACCESS_KEY_ID=
|
|
239
|
+
AWS_SECRET_ACCESS_KEY=
|
|
240
|
+
AWS_REGION=us-east-1
|
|
241
|
+
|
|
242
|
+
# ── BYOK Tool Mode ───────────────────────────────────────────────
|
|
243
|
+
# smart (default) = 25 Tier-1 tools exposed
|
|
244
|
+
# full = all 275+ tools exposed (use with Claude Code, not Cursor)
|
|
245
|
+
ALGOCHAINS_TOOL_MODE=smart
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Enforce LF for shell scripts + hooks: CRLF breaks bash ("fi\r" -> unexpected EOF)
|
|
2
|
+
# Root cause: core.autocrlf=true smudging .sh to CRLF on Windows checkouts.
|
|
3
|
+
*.sh text eol=lf
|
|
4
|
+
*.bash text eol=lf
|
|
5
|
+
*.zsh text eol=lf
|
|
6
|
+
hooks/** text eol=lf
|
|
7
|
+
.husky/** text eol=lf
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
name: MCP Tool Regression Gate
|
|
2
|
+
on: [push, pull_request]
|
|
3
|
+
|
|
4
|
+
jobs:
|
|
5
|
+
tool-schema-validation:
|
|
6
|
+
runs-on: ubuntu-latest
|
|
7
|
+
steps:
|
|
8
|
+
- uses: actions/checkout@v4
|
|
9
|
+
- uses: actions/setup-node@v4
|
|
10
|
+
with:
|
|
11
|
+
node-version: 22
|
|
12
|
+
- uses: actions/setup-python@v5
|
|
13
|
+
with:
|
|
14
|
+
python-version: '3.12'
|
|
15
|
+
|
|
16
|
+
- name: Install AlgoChains MCP + MCPorter
|
|
17
|
+
run: |
|
|
18
|
+
pip install -e ".[dev]"
|
|
19
|
+
npm install -g mcporter
|
|
20
|
+
|
|
21
|
+
- name: Configure MCPorter
|
|
22
|
+
run: |
|
|
23
|
+
mkdir -p config
|
|
24
|
+
cat > config/mcporter.json << 'EOF'
|
|
25
|
+
{
|
|
26
|
+
"mcpServers": {
|
|
27
|
+
"algochains": {
|
|
28
|
+
"command": "algochains-mcp",
|
|
29
|
+
"env": {
|
|
30
|
+
"ALGOCHAINS_TOOL_MODE": "full"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
EOF
|
|
36
|
+
|
|
37
|
+
# Gate 1: Tool count must not decrease.
|
|
38
|
+
# Floor is conservatively below the current ground-truth (476 full, 150 smart).
|
|
39
|
+
# Bump both together when intentionally adding or removing tool families.
|
|
40
|
+
- name: "Gate 1: Full-Mode Tool Count (≥460)"
|
|
41
|
+
run: |
|
|
42
|
+
TOOLS=$(npx mcporter list algochains --json | jq '.tools | length')
|
|
43
|
+
echo "Tool count (full mode): $TOOLS"
|
|
44
|
+
[ "$TOOLS" -ge 460 ] || (echo "❌ FAIL: Expected ≥460 full-mode tools, got $TOOLS" && exit 1)
|
|
45
|
+
echo "✅ Full-mode tool count: $TOOLS"
|
|
46
|
+
|
|
47
|
+
# Gate 1b: Smart-mode Tier-1 count must stay in band.
|
|
48
|
+
- name: "Gate 1b: Smart-Mode Tier-1 Count (100–200)"
|
|
49
|
+
run: |
|
|
50
|
+
python3 - << 'PYEOF'
|
|
51
|
+
import sys
|
|
52
|
+
sys.path.insert(0, 'src')
|
|
53
|
+
import algochains_mcp.server as srv
|
|
54
|
+
count = len(srv.TOOLS_TIER1)
|
|
55
|
+
print(f"Smart-mode Tier-1 count: {count}")
|
|
56
|
+
assert 100 <= count <= 200, (
|
|
57
|
+
f"Smart-mode Tier-1 count {count} out of range [100, 200]. "
|
|
58
|
+
"Review TIER1_TOOL_NAMES in server.py."
|
|
59
|
+
)
|
|
60
|
+
print(f"✅ Smart-mode Tier-1 count: {count}")
|
|
61
|
+
PYEOF
|
|
62
|
+
|
|
63
|
+
# Gate 2: All Tier 1 tools must be present in smart mode
|
|
64
|
+
- name: "Gate 2: Tier 1 Tools Present"
|
|
65
|
+
env:
|
|
66
|
+
ALGOCHAINS_TOOL_MODE: smart
|
|
67
|
+
run: |
|
|
68
|
+
TIER1_EXPECTED="discover_tools get_tool_details execute_dynamic_tool massive_search_endpoints massive_call_api massive_query_data massive_run_pipeline get_positions get_account get_orders get_bot_health get_quant_regime_state portfolio_summary connect_broker run_backtest validate_strategy validate_strategy_metrics optimize_strategy browse_strategy_marketplace execute_intent approve_intent create_shadow_portfolio detect_market_regime"
|
|
69
|
+
TOOLS_JSON=$(npx mcporter list algochains --json)
|
|
70
|
+
for tool in $TIER1_EXPECTED; do
|
|
71
|
+
echo "$TOOLS_JSON" | jq -e ".tools[] | select(.name == \"$tool\")" > /dev/null 2>&1 \
|
|
72
|
+
|| (echo "❌ Missing Tier 1 tool: $tool" && exit 1)
|
|
73
|
+
done
|
|
74
|
+
echo "✅ All Tier 1 tools present (v22 smart mode)"
|
|
75
|
+
|
|
76
|
+
# Gate 3: BM25 Smart Discovery returns relevant results (Python direct test — no mcporter call needed)
|
|
77
|
+
- name: "Gate 3: Smart Discovery BM25"
|
|
78
|
+
run: |
|
|
79
|
+
python3 - << 'PYEOF'
|
|
80
|
+
import sys
|
|
81
|
+
sys.path.insert(0, 'src')
|
|
82
|
+
from algochains_mcp.dynamic_toolsets.gateway import DynamicToolsetGateway
|
|
83
|
+
from algochains_mcp.server import TOOLS
|
|
84
|
+
|
|
85
|
+
gw = DynamicToolsetGateway()
|
|
86
|
+
gw.register_tools_from_list(
|
|
87
|
+
[{"name": t.name, "description": t.description, "inputSchema": t.inputSchema}
|
|
88
|
+
for t in TOOLS],
|
|
89
|
+
category="core", version="v20"
|
|
90
|
+
)
|
|
91
|
+
gw.build_index()
|
|
92
|
+
|
|
93
|
+
# Test 1: sentiment query
|
|
94
|
+
results = gw.discover("sentiment analysis", top_k=10)
|
|
95
|
+
sentiment_hits = [r for r in results if "sentiment" in r["name"].lower()]
|
|
96
|
+
assert sentiment_hits, f"BM25 'sentiment analysis' returned no sentiment tools. Got: {[r['name'] for r in results]}"
|
|
97
|
+
print(f"✅ BM25 sentiment: {[r['name'] for r in sentiment_hits]}")
|
|
98
|
+
|
|
99
|
+
# Test 2: portfolio query
|
|
100
|
+
results = gw.discover("portfolio positions", top_k=10)
|
|
101
|
+
portfolio_hits = [r for r in results if "portfolio" in r["name"].lower() or "position" in r["name"].lower()]
|
|
102
|
+
assert portfolio_hits, f"BM25 'portfolio positions' returned no portfolio/position tools. Got: {[r['name'] for r in results]}"
|
|
103
|
+
print(f"✅ BM25 portfolio: {[r['name'] for r in portfolio_hits]}")
|
|
104
|
+
|
|
105
|
+
print("✅ BM25 index returning relevant results")
|
|
106
|
+
PYEOF
|
|
107
|
+
|
|
108
|
+
# Gate 4: V18 Intent Engine tools present and callable
|
|
109
|
+
- name: "Gate 4: V18 Intent Engine Tools"
|
|
110
|
+
run: |
|
|
111
|
+
V18_TOOLS="execute_intent get_intent_plan approve_intent get_intent_history create_shadow_portfolio get_shadow_results evolve_strategies detect_arbitrage detect_market_regime prefetch_context"
|
|
112
|
+
TOOLS_JSON=$(npx mcporter list algochains --json)
|
|
113
|
+
COUNT=0
|
|
114
|
+
for tool in $V18_TOOLS; do
|
|
115
|
+
if echo "$TOOLS_JSON" | jq -e ".tools[] | select(.name == \"$tool\")" > /dev/null 2>&1; then
|
|
116
|
+
COUNT=$((COUNT + 1))
|
|
117
|
+
else
|
|
118
|
+
echo "❌ Missing V18 tool: $tool"
|
|
119
|
+
exit 1
|
|
120
|
+
fi
|
|
121
|
+
done
|
|
122
|
+
echo "✅ All $COUNT V18 Intent Engine + Genius Layer tools present"
|
|
123
|
+
|
|
124
|
+
# Gate 5: detect_market_regime returns valid regime output (Python direct test)
|
|
125
|
+
- name: "Gate 5: V18 Smoke Test"
|
|
126
|
+
run: |
|
|
127
|
+
python3 - << 'PYEOF'
|
|
128
|
+
import sys, asyncio
|
|
129
|
+
sys.path.insert(0, 'src')
|
|
130
|
+
from algochains_mcp.intent_engine.regime_detector import RegimeDetector, RegimeSignals
|
|
131
|
+
|
|
132
|
+
async def run():
|
|
133
|
+
eng = RegimeDetector()
|
|
134
|
+
result = await eng.detect(RegimeSignals())
|
|
135
|
+
data = result.to_dict()
|
|
136
|
+
assert "regime" in data, f"detect_market_regime missing 'regime' key: {data}"
|
|
137
|
+
print(f"✅ V18 detect_market_regime returns valid regime: {data['regime']}")
|
|
138
|
+
|
|
139
|
+
asyncio.run(run())
|
|
140
|
+
PYEOF
|
|
141
|
+
|
|
142
|
+
# Gate 6: Python AST parse (no syntax errors in server.py)
|
|
143
|
+
- name: "Gate 6: Python AST Validation"
|
|
144
|
+
run: |
|
|
145
|
+
python3 -c "
|
|
146
|
+
import ast
|
|
147
|
+
with open('src/algochains_mcp/server.py') as f:
|
|
148
|
+
tree = ast.parse(f.read())
|
|
149
|
+
print('✅ server.py AST parse OK')
|
|
150
|
+
"
|
|
151
|
+
python3 -c "
|
|
152
|
+
import ast, glob
|
|
153
|
+
for f in glob.glob('src/algochains_mcp/intent_engine/*.py'):
|
|
154
|
+
with open(f) as fh:
|
|
155
|
+
ast.parse(fh.read())
|
|
156
|
+
print(f'✅ {f} OK')
|
|
157
|
+
"
|
|
158
|
+
|
|
159
|
+
# Gate 7: Massive white-label provider imports cleanly and the 4 composable
|
|
160
|
+
# tool methods are addressable. When a MASSIVE_API_KEY is available in CI
|
|
161
|
+
# (encrypted secret), build the BM25 index and run a read-only search so we
|
|
162
|
+
# catch upstream `llms.txt` drift before it hits the Tyler account.
|
|
163
|
+
- name: "Gate 7: Massive Provider Import + Optional Mocked API"
|
|
164
|
+
env:
|
|
165
|
+
MASSIVE_API_KEY: ${{ secrets.MASSIVE_API_KEY }}
|
|
166
|
+
run: |
|
|
167
|
+
python3 - << 'PYEOF'
|
|
168
|
+
import asyncio
|
|
169
|
+
import os
|
|
170
|
+
import sys
|
|
171
|
+
sys.path.insert(0, 'src')
|
|
172
|
+
|
|
173
|
+
from algochains_mcp.data_providers.massive_whitelabel import (
|
|
174
|
+
MassiveWhiteLabelProvider,
|
|
175
|
+
)
|
|
176
|
+
from algochains_mcp.config import MassiveConfig
|
|
177
|
+
|
|
178
|
+
required = {"search_endpoints", "get_endpoint_docs", "call_api", "query_data", "startup"}
|
|
179
|
+
missing = [m for m in required if not hasattr(MassiveWhiteLabelProvider, m)]
|
|
180
|
+
assert not missing, f"MassiveWhiteLabelProvider missing methods: {missing}"
|
|
181
|
+
print(f"✅ Massive provider exposes composable tool surface: {sorted(required)}")
|
|
182
|
+
|
|
183
|
+
if not os.environ.get("MASSIVE_API_KEY"):
|
|
184
|
+
print("ℹ️ MASSIVE_API_KEY absent in this CI context — skipping live BM25 smoke")
|
|
185
|
+
sys.exit(0)
|
|
186
|
+
|
|
187
|
+
async def _smoke():
|
|
188
|
+
cfg = MassiveConfig(api_key=os.environ["MASSIVE_API_KEY"])
|
|
189
|
+
prov = MassiveWhiteLabelProvider(cfg)
|
|
190
|
+
await prov.startup()
|
|
191
|
+
hits = prov.search_endpoints(query="aggregates", top_k=3)
|
|
192
|
+
assert isinstance(hits, list) and hits, f"search_endpoints returned nothing: {hits!r}"
|
|
193
|
+
print(f"✅ Massive BM25 returned {len(hits)} hits (top: {hits[0].get('path', '?')})")
|
|
194
|
+
|
|
195
|
+
asyncio.run(_smoke())
|
|
196
|
+
PYEOF
|
|
197
|
+
|
|
198
|
+
# Gate 8: server.py non-empty — catches accidental zeroing
|
|
199
|
+
- name: "Gate 8: server.py Non-Empty"
|
|
200
|
+
run: |
|
|
201
|
+
SIZE=$(wc -c < src/algochains_mcp/server.py)
|
|
202
|
+
echo "server.py size: $SIZE bytes"
|
|
203
|
+
[ "$SIZE" -gt 10000 ] || (echo "❌ FAIL: server.py is only $SIZE bytes — likely accidental deletion" && exit 1)
|
|
204
|
+
echo "✅ server.py size: $SIZE bytes"
|
|
205
|
+
|
|
206
|
+
# Gate 9: Secret scan — no hardcoded API keys in src/ or tests/
|
|
207
|
+
- name: "Gate 9: Secret Scan"
|
|
208
|
+
run: |
|
|
209
|
+
python3 scripts/secret_scan.py --ci
|
|
210
|
+
echo "✅ Secret scan clean"
|
|
211
|
+
|
|
212
|
+
# Gate 10: Docs drift check — README/pyproject must agree on major version
|
|
213
|
+
- name: "Gate 10: Docs Version Drift"
|
|
214
|
+
run: |
|
|
215
|
+
python3 - << 'PYEOF'
|
|
216
|
+
import re
|
|
217
|
+
from pathlib import Path
|
|
218
|
+
|
|
219
|
+
root = Path(".")
|
|
220
|
+
pyproject = (root / "pyproject.toml").read_text()
|
|
221
|
+
readme = (root / "README.md").read_text()
|
|
222
|
+
|
|
223
|
+
# Extract version from pyproject.toml
|
|
224
|
+
m = re.search(r'^version\s*=\s*["\']([^"\']+)["\']', pyproject, re.MULTILINE)
|
|
225
|
+
assert m, "Could not find version in pyproject.toml"
|
|
226
|
+
pyproject_version = m.group(1) # e.g. "22.2.0"
|
|
227
|
+
major = pyproject_version.split(".")[0] # "22"
|
|
228
|
+
|
|
229
|
+
# README should reference same major version in badge or changelog
|
|
230
|
+
assert f"v{major}" in readme or f"version-{major}" in readme.lower() or major in readme, (
|
|
231
|
+
f"README does not reference major version v{major} from pyproject.toml. "
|
|
232
|
+
"Update README badge or changelog header."
|
|
233
|
+
)
|
|
234
|
+
print(f"✅ Version consistency: pyproject={pyproject_version}, README references v{major}")
|
|
235
|
+
PYEOF
|
|
236
|
+
|
|
237
|
+
# Gate 11: algochains.ts description must not say v18 (stale wrapper check)
|
|
238
|
+
- name: "Gate 11: Generated Wrapper Freshness"
|
|
239
|
+
run: |
|
|
240
|
+
python3 - << 'PYEOF'
|
|
241
|
+
from pathlib import Path
|
|
242
|
+
ts = Path("algochains.ts")
|
|
243
|
+
if not ts.exists():
|
|
244
|
+
print("ℹ️ algochains.ts not found — skipping wrapper freshness check")
|
|
245
|
+
import sys; sys.exit(0)
|
|
246
|
+
content = ts.read_text(errors="replace")
|
|
247
|
+
stale_markers = ["v18 ", "v18—", "167+ tools", "167+", "~25 core tools"]
|
|
248
|
+
found = [m for m in stale_markers if m.lower() in content.lower()]
|
|
249
|
+
assert not found, (
|
|
250
|
+
f"algochains.ts contains stale version markers: {found}. "
|
|
251
|
+
"Run: npx mcporter generate algochains --out algochains.ts to regenerate."
|
|
252
|
+
)
|
|
253
|
+
print("✅ algochains.ts has no stale v18/167+ markers")
|
|
254
|
+
PYEOF
|
|
255
|
+
|
|
256
|
+
# Gate 12: No zero-byte non-init source files
|
|
257
|
+
- name: "Gate 12: No Zero-Byte Source Files"
|
|
258
|
+
run: |
|
|
259
|
+
# __init__.py files may be intentionally empty as package markers
|
|
260
|
+
ZEROED=$(find src/algochains_mcp -name "*.py" ! -name "__init__.py" -empty 2>/dev/null | head -20)
|
|
261
|
+
if [ -n "$ZEROED" ]; then
|
|
262
|
+
echo "❌ Zero-byte source files detected (excluding __init__.py):"
|
|
263
|
+
echo "$ZEROED"
|
|
264
|
+
exit 1
|
|
265
|
+
fi
|
|
266
|
+
echo "✅ No zero-byte source files"
|