Skip to main content
Glama
portel-dev

NCP - Natural Context Provider

by portel-dev
workflow-schedule-integration.md10.8 kB
# Workflow + Schedule Integration Guide ## Architecture Overview Two MCPs working together for intelligent task automation: ``` ┌─────────────────┐ ┌──────────────────┐ │ Schedule MCP │ ─────> │ Workflow MCP │ │ │ │ │ │ • WHEN to run │ │ • WHAT to run │ │ • Cron timing │ │ • Claude brain │ │ • Task queue │ │ • Tool calling │ │ • Persistence │ │ • Intelligence │ └─────────────────┘ └──────────────────┘ │ │ │ ▼ │ ┌──────────────────┐ │ │ Other SimpleMCPs│ │ │ │ └──────────────────>│ • GitHub │ │ • Slack/Email │ │ • Database │ │ • Cloud Storage │ │ • AI │ └──────────────────┘ ``` ## Quick Start ### 1. Test Workflow First Always test manually before scheduling: ```bash # Test the intelligent task ncp run workflow:execute-task \ task="Check GitHub issues and summarize them" # Or test a predefined workflow ncp run workflow:execute \ workflowName="daily-standup" \ context='{"slackWebhook":"https://...","repo":"owner/repo"}' ``` ### 2. Schedule It Once it works, add to schedule: ```bash ncp run schedule:add \ name="morning-standup" \ command="ncp run workflow:execute workflowName=daily-standup context='{\"slackWebhook\":\"...\",\"repo\":\"...\"}'" \ schedule="0 9 * * 1-5" \ description="Daily standup summary" ``` ### 3. Verify & Monitor ```bash # List all scheduled tasks ncp run schedule:list # Check specific task ncp run schedule:get name="morning-standup" # View logs (if schedule MCP supports it) ncp run schedule:logs name="morning-standup" ``` ## Real-World Examples ### Example 1: Automated Daily Standup **Goal**: Every weekday at 9am, check GitHub issues and post summary to Slack **Step 1 - Test manually**: ```bash ncp run workflow:execute \ workflowName="daily-standup" \ context='{ "slackWebhook": "https://hooks.slack.com/services/T00/B00/XXX", "repo": "company/project" }' ``` **Step 2 - Schedule it**: ```bash ncp run schedule:add \ name="team-standup" \ command="ncp run workflow:execute workflowName=daily-standup context='{\"slackWebhook\":\"https://hooks.slack.com/services/T00/B00/XXX\",\"repo\":\"company/project\"}'" \ schedule="0 9 * * 1-5" \ description="Automated daily standup summary" ``` **Result**: Every weekday at 9am: 1. Workflow MCP fetches GitHub issues 2. Claude summarizes them intelligently 3. Posts to your Slack channel ### Example 2: Content Monitoring **Goal**: Every hour, check website for changes and alert team **Step 1 - Define custom workflow**: ```json { "name": "content-monitor", "description": "Monitor website for changes", "steps": [ { "name": "Scrape Content", "tool": "scraper:extract", "parameters": {"url": "https://example.com/news"} }, { "name": "Check Changes", "tool": "ai:complete", "parameters": { "prompt": "Compare with previous content and identify significant changes", "provider": "anthropic" } }, { "name": "Alert Team", "tool": "notify:slack", "parameters": { "webhookUrl": "${context.slackWebhook}", "text": "Content changed: ${previousResults[1].output}" } } ] } ``` **Step 2 - Test it**: ```bash ncp run workflow:execute-custom \ workflow='<paste-json-above>' \ context='{"slackWebhook":"https://..."}' ``` **Step 3 - Schedule it**: ```bash ncp run schedule:add \ name="content-monitor" \ command="ncp run workflow:execute-custom workflow='<escaped-json>' context='{\"slackWebhook\":\"...\"}'" \ schedule="0 * * * *" \ description="Hourly content monitoring" ``` ### Example 3: Intelligent Task Execution **Goal**: Let Claude decide what to do based on context **Use Case**: "Check our key metrics and alert if anything looks unusual" **Schedule intelligent task**: ```bash ncp run schedule:add \ name="metrics-check" \ command="ncp run workflow:execute-task task='Query database for key metrics from last hour, analyze for anomalies, and alert via Slack if anything unusual' context='{\"dbPath\":\"./metrics.db\",\"slackWebhook\":\"...\"}'" \ schedule="0 * * * *" \ description="Intelligent metrics monitoring" ``` **What happens**: 1. Schedule MCP calls Workflow MCP every hour 2. Workflow MCP uses Claude to figure out: - What database queries to run - What constitutes "unusual" - Whether to send an alert 3. Claude orchestrates the necessary SimpleMCPs to accomplish the task ### Example 4: Data Pipeline **Goal**: Daily ETL job with AI enrichment ```bash # 1. Create custom workflow cat > data-pipeline.json << 'EOF' { "name": "daily-etl", "description": "Extract, enrich with AI, load to database", "steps": [ { "name": "Extract from API", "tool": "scraper:extract", "parameters": {"url": "https://api.example.com/data"} }, { "name": "Enrich with AI", "tool": "ai:complete", "parameters": { "prompt": "Categorize and tag this data: ${previousResults[0].output}", "provider": "anthropic" } }, { "name": "Load to Database", "tool": "database:insert", "parameters": { "dbPath": "./analytics.db", "tableName": "enriched_data" } }, { "name": "Upload Backup to S3", "tool": "cloud:s3-upload", "parameters": { "bucket": "backups", "key": "daily-${timestamp}.json" } } ] } EOF # 2. Test it ncp run workflow:execute-custom workflow="$(cat data-pipeline.json)" # 3. Schedule it for 2am daily ncp run schedule:add \ name="daily-etl" \ command="ncp run workflow:execute-custom workflow='$(cat data-pipeline.json | jq -c)'" \ schedule="0 2 * * *" \ description="Daily ETL with AI enrichment" ``` ## Common Patterns ### Pattern 1: Test → Schedule → Monitor ```bash # Always follow this pattern: # 1. TEST ncp run workflow:execute workflowName="..." context='...' # 2. SCHEDULE (only if test succeeded) ncp run schedule:add name="..." command="ncp run workflow:..." schedule="..." # 3. MONITOR ncp run schedule:list ``` ### Pattern 2: Multiple Workflows at Different Times ```bash # Morning: GitHub summary ncp run schedule:add name="morning-github" command="..." schedule="0 9 * * 1-5" # Hourly: Content monitoring ncp run schedule:add name="content-check" command="..." schedule="0 * * * *" # Evening: Daily report ncp run schedule:add name="evening-report" command="..." schedule="0 17 * * 1-5" # Night: Backups ncp run schedule:add name="nightly-backup" command="..." schedule="0 2 * * *" ``` ### Pattern 3: Conditional Execution Workflow handles the logic, schedule just invokes it: ```bash # Schedule runs every hour, but workflow only alerts if needed ncp run schedule:add \ name="smart-alert" \ command="ncp run workflow:execute-task task='Check metrics, only alert if anomalies detected'" \ schedule="0 * * * *" ``` ## Best Practices ### 1. Always Test Before Scheduling ```bash # ❌ DON'T: Schedule without testing ncp run schedule:add name="untested" command="ncp run workflow:execute ..." schedule="..." # ✅ DO: Test first ncp run workflow:execute workflowName="..." context='...' # Verify it works, THEN schedule ncp run schedule:add name="tested" command="..." schedule="..." ``` ### 2. Use Descriptive Names ```bash # ❌ BAD: Vague names ncp run schedule:add name="task1" command="..." schedule="..." # ✅ GOOD: Descriptive names ncp run schedule:add name="daily-standup-engineering-team" command="..." schedule="..." ``` ### 3. Add Descriptions ```bash ncp run schedule:add \ name="content-monitor" \ command="..." \ schedule="0 * * * *" \ description="Monitors company blog for changes, alerts #marketing channel" ``` ### 4. Start with Longer Intervals ```bash # ❌ DON'T: Start with frequent execution schedule="*/5 * * * *" # Every 5 minutes - may hit rate limits # ✅ DO: Start conservative, increase frequency later schedule="0 */6 * * *" # Every 6 hours initially # After monitoring, adjust to: schedule="0 * * * *" # Every hour ``` ### 5. Handle Errors Gracefully Use workflow's built-in error handling: ```json { "steps": [ {"name": "Try main task", "tool": "..."}, { "name": "Fallback notification", "tool": "notify:email", "parameters": {"to": "admin@company.com", "subject": "Workflow failed"}, "condition": "previousResults[0].success === false" } ] } ``` ## Troubleshooting ### Problem: Workflow not executing on schedule **Check**: ```bash # 1. Is it scheduled? ncp run schedule:list | grep "your-workflow" # 2. Is schedule MCP running? ps aux | grep ncp # 3. Check schedule MCP logs ncp run schedule:logs name="your-workflow" # 4. Test workflow manually ncp run workflow:execute workflowName="..." context='...' ``` ### Problem: Workflow executes but fails **Debug**: ```bash # Run workflow manually to see detailed error ncp run workflow:execute workflowName="..." context='...' # Check each step individually ncp run github:list-issues repo="owner/repo" ncp run ai:complete prompt="test" provider="anthropic" ``` ### Problem: Wrong schedule time ```bash # Remove and re-add with correct schedule ncp run schedule:remove name="your-workflow" ncp run schedule:add name="your-workflow" command="..." schedule="correct-cron" ``` ## Summary **Schedule MCP** handles **WHEN** (timing, persistence, execution) **Workflow MCP** handles **WHAT** (intelligence, orchestration, tools) **Together they enable**: - ✅ Automated intelligent task execution - ✅ Claude-powered decision making - ✅ Multi-step workflows with conditional logic - ✅ Integration with all SimpleMCPs - ✅ Reliable scheduling and error handling **Workflow pattern**: 1. Define intelligent task (workflow or free-form) 2. Test manually to verify it works 3. Schedule with Schedule MCP 4. Monitor execution and refine This combination gives you **cron + intelligence** - scheduled tasks that can think and adapt!

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/portel-dev/ncp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server