
by Alpaca
No reviews yetAlpaca-branded SaaS short trader with MCP-native execution: scores AI disruption risk, builds capped short baskets, and tracks paper/live PnL in SerenDB.
+187.6%
Annualized Return %
+8.0%
Total Trades
Skill instructions are preloaded in context when this skill is active. Do not perform filesystem searches or tool-driven exploration to rediscover them; use the guidance below directly.
Autonomous strategy agent for shorting SaaS names under AI-driven multiple compression.
Default backend is MCP-native:
mcp__seren-mcp__call_publishermcp__seren-mcp__run_sql / mcp__seren-mcp__run_sql_transactionmcp__seren-mcp__list_* / create_*Legacy Python/API scripts remain available as fallback, not default.
Immediately run a paper-sim scan without asking. Do not present a menu of modes. Follow the MCP-native workflow in scripts/dry_run_prompt.txt to execute a paper-sim run. Display the full scan and scoring results to the user. Only after results are displayed, present available next steps (paper mode, live mode). If the user explicitly requests a specific mode in their invocation message, run that mode instead.
scripts/dry_run_prompt.txt - single copy/paste MCP-native run prompt (default)scripts/dry_run_checklist.md - MCP-native readiness checklistscripts/mcp_native_runbook.md - canonical MCP execution contractscripts/strategy_engine.py - core scan/monitor/post-close enginescripts/serendb_storage.py - persistence layerscripts/seren_client.py - publisher gateway clientscripts/self_learning.py - learning loopscripts/run_agent_server.py - authenticated webhook runner for seren-cronscripts/setup_cron.py - create/update cron jobsscripts/setup_serendb.py - apply base + learning schemaspaper - plan and store paper orderspaper-sim - simulate fills/PnL only (default)live - real broker execution path (requires explicit user approval)alpaca-short-traderalpaca_short_botserendb_schema.sql and self_learning_schema.sql are applied via MCP SQL.alpacasec-filings-intelligencegoogle-trendsperplexity (fallback: exa)Use scripts/dry_run_prompt.txt for one-copy/paste execution.
Before any live run:
APCA_API_KEY_ID, APCA_API_SECRET_KEY, and optional APCA_API_BASE_URL are loaded for local Alpaca REST broker access.sec-filings-intelligence, google-trends, and perplexity or exa are reachable.SEREN_API_KEY is loaded so market data can still use the alpaca publisher snapshots path.strict_required_feeds and live_controls still fit the account before submitting orders.Dependency validation is required before live trading. Verify local Alpaca REST credentials (APCA_API_KEY_ID, APCA_API_SECRET_KEY, optional APCA_API_BASE_URL), SEREN_API_KEY, the alpaca market-data publisher, sec-filings-intelligence, google-trends, and the news research publisher are loaded and reachable. If credentials are missing, a required feed is blocked, or Alpaca account preflight fails, the runtime must stop with an error instead of submitting orders.
Default mode is paper-sim. Live trading requires both:
mode=live in config or request payloadpython3 scripts/strategy_engine.py --config config.json --mode live --allow-live ...For scheduled execution, the trigger server must be started with --allow-live or the webhook payload must set allow_live=true. This is a startup-only live opt-in for that process or schedule, not a per-order approval prompt.
To stop trading immediately, run python3 scripts/strategy_engine.py --config config.json --stop-trading or send action=stop-trading to the webhook runner. The stop-trading path cancels all tracked live orders for the latest strategy run without requiring an extra live confirmation.
15 8 * * 1-5 (08:15 ET)15 10-15 * * 1-5 (hourly, 10:15-15:15 ET)20 16 * * 1-5 (16:20 ET)35 16 * * 1-5 (MCP SQL upsert)30 9 * * 60 7 * * 1cd alpaca/saas-short-trader
python3 -m pip install -r requirements.txt
cp .env.example .env
cp config.example.json config.json
python3 scripts/setup_serendb.py --api-key "$SEREN_API_KEY"
python3 scripts/strategy_engine.py --api-key "$SEREN_API_KEY" --run-type scan --mode paper-sim
python3 scripts/strategy_engine.py --api-key "$SEREN_API_KEY" --run-type monitor --mode paper-sim
python3 scripts/strategy_engine.py --api-key "$SEREN_API_KEY" --run-type post-close --mode paper-sim
python3 scripts/self_learning.py --api-key "$SEREN_API_KEY" --action full --mode paper-sim
Use seren-cron to run this skill on a schedule — no terminal windows to keep open, no daemons, no permanent computer changes required. Seren-cron is a cloud scheduler that calls your local trigger server on a cron schedule.
Requirements: Seren Desktop login or a valid SEREN_API_KEY.
Before scheduling, verify the publisher is reachable using mcp__seren__call_publisher:
publisher: seren-cron
path: /health
method: GET
If this call fails, stop here and tell the user:
"The seren-cron service could not be reached. Please send this error to hello@serendb.com for support."
Always check for existing scheduled jobs before creating a new one. A user may have forgotten a live job is already running.
publisher: seren-cron
path: /jobs
method: GET
If jobs for this skill already exist, show them to the user and ask:
"You have [N] active cron job(s) for this skill. Would you like to:
- Keep them running (recommended if intentional)
- Stop all and create a new schedule
- Cancel"
Do not create a duplicate cron job without explicit user confirmation.
Start the webhook server that seren-cron will call on each scheduled tick:
SEREN_API_KEY="$SEREN_API_KEY" python3 scripts/run_agent_server.py --config config.json --port 8080
This process runs in your terminal session. When you close the terminal, it stops — that is expected and correct. Seren-cron handles the scheduling; your local server handles execution.
This skill uses multiple schedules aligned to market hours (ET). Create one job per schedule:
Scan (08:15 ET weekdays):
publisher: seren-cron
path: /jobs
method: POST
body: {
"name": "alpaca-saas-short-trader-live-scan",
"url": "http://localhost:8080/run",
"method": "POST",
"cron_expression": "15 8 * * 1-5",
"timezone": "UTC",
"enabled": true,
"timeout_seconds": 60
}
Monitor (10:15–15:15 ET weekdays, hourly):
publisher: seren-cron
path: /jobs
method: POST
body: {
"name": "alpaca-saas-short-trader-live-monitor",
"url": "http://localhost:8080/run",
"method": "POST",
"cron_expression": "15 10-15 * * 1-5",
"timezone": "UTC",
"enabled": true,
"timeout_seconds": 60
}
Post-close (16:20 ET weekdays):
publisher: seren-cron
path: /jobs
method: POST
body: {
"name": "alpaca-saas-short-trader-live-postclose",
"url": "http://localhost:8080/run",
"method": "POST",
"cron_expression": "20 16 * * 1-5",
"timezone": "UTC",
"enabled": true,
"timeout_seconds": 60
}
Save the returned job_id for each job — you need them to pause, resume, or delete jobs later.
List all active jobs:
publisher: seren-cron, path: /jobs, method: GET
Pause:
publisher: seren-cron, path: /jobs/{job_id}/pause, method: POST
Resume:
publisher: seren-cron, path: /jobs/{job_id}/resume, method: POST
Stop permanently:
publisher: seren-cron, path: /jobs/{job_id}, method: DELETE
If a live trade or cycle fails because the trading balance or SerenBucks balance is too low to execute, immediately pause the cron job:
publisher: seren-cron, path: /jobs/{job_id}/pause, method: POST
Then tell the user:
"Automated trading has been paused: insufficient funds detected. Please top up your balance before resuming the schedule."
Never allow the cron to keep firing when there are no funds available to trade.
Before running this skill, check for an existing Seren API key in this order:
API_KEY automatically. Check: echo $API_KEY. If set, no further action is needed..env file — check if SEREN_API_KEY is already set in the skill's .env file. If set, no further action is needed.SEREN_API_KEY is exported in the current shell. If set, no further action is needed.Only if none of the above are set, register a new agent account:
curl -sS -X POST "https://api.serendb.com/auth/agent" \
-H "Content-Type: application/json" \
-d '{"name":"saas-short-trader"}'
Extract the API key from the response at .data.agent.api_key — this key is shown only once. Write it to the skill's .env file:
SEREN_API_KEY=<the-returned-key>
Verify:
curl -sS "https://api.serendb.com/auth/me" \
-H "Authorization: Bearer $SEREN_API_KEY"
Do not create a new account if a key already exists. Creating a duplicate account results in a $0-balance key that overrides the user's funded account.
Reference: https://docs.serendb.com/skills.md
Free
npx skills add serenorg/seren-skillsSelect “Alpaca SaaS Short Trader” when prompted
Alpaca
Added March 1, 2026