mongodb-atlas-stream-processing
Manages MongoDB Atlas Stream Processing (ASP) workflows. Handles workspace provisioning, data source/sink connections, processor lifecycle operations, debugging diagnostics, and tier sizing. Supports Kafka, Atlas clusters, S3, HTTPS, and Lambda integrations for streaming data workloads and event pro
By mongodb · 2,640 installs
npx skills add mongodb/agent-skills --skill mongodb-atlas-stream-processing
Source repository · Upstream listing
MongoDB Atlas Streams
Build, operate, and debug Atlas Stream Processing (ASP) pipelines using four MCP tools from the MongoDB MCP Server.
Prerequisites
This skill requires the MongoDB MCP Server connected with:
Atlas API credentials ( apiClientId and apiClientSecret )
The 4 tools: atlas streams discover , atlas streams build , atlas streams manage , atlas streams teardown .
All operations require an Atlas project ID. If unknown, call atlas list projects first to find your project ID.
If MCP tools are unavailable
If the MongoDB MCP Server is not connected or the streams tools are missing, see [references/mcp troubleshooting.md](references/mcp troubleshooting.md) for diagnostic steps and fallback options.
Tool Selection Matrix
atlas streams discover — ALL read operations
Action Use when
list workspaces See all workspaces in a project
inspect workspace Review workspace config, state, region
list connections See all connections in a workspace
inspect connection Check connection state, config, health
list processors See all processors in a workspace
inspect processor Check processor state, pipeline, config
diagnose processor Full health report: state, stats, errors
get networking PrivateLink and VPC peering details. Optional: cloudProvider + region to get Atlas account details for PrivateLink setup
Pagination (all list actions): limit (1 100, default 20), pageNum (default 1).
Response format : responseFormat — "concise" (default for list actions) or "detailed" (default for inspect/diagnose).
atlas streams build — ALL create operations
Resource Key parameters
workspace cloudProvider , region , tier (default SP10), includeSampleData
connection connectionName , connectionType (Kafka/Cluster/S3/Https/Kinesis/Lambda/SchemaRegistry/Sample), connectionConfig
processor processorName , pipeline (must start with $source , end with $merge / $emit ), dlq , autoStart
privatelink privateLinkConfig (project level, not tied to a specific workspace)
Field mapping — only fill fields for the selected resource type:
resource = "workspace": Fill: projectId , workspaceName , cloudProvider , region , tier , includeSampleData . Leave empty: all connection and processor fields.
resource = "connection": Fill: projectId , workspaceName , connectionName , connectionType , connectionConfig . Leave empty: all workspace and processor fields. (See [references/connection configs.md](references/connection configs.md) for type specific schemas.)
resource = "processor": Fill: projectId , workspaceName , processorName , pipeline , dlq (recommended), autoStart (optional). Leave empty: all workspace and connection fields. (See [references/pipeline patterns.md](references/pipeline patterns.md) for pipeline examples.)
resource = "privatelink": Fill: projectId , privateLinkConfig . Note: PrivateLink is project level , not workspace level. workspaceName is not required — omit it. Leave empty: all connection and processor fields.
atlas streams manage — ALL update/state operations
Action Notes
start processor Begins billing. Optional tier override, resumeFromCheckpoint
stop processor Stops billing. Retains state 45 days
modify processor Processor must be stopped first. Change pipeline, DLQ, or name
update workspace Change tier or region
update connection Update config (networking is immutable — must delete and recreate)
accept peering / reject peering VPC peering management
Field mapping — always fill projectId , workspaceName , then by action:
"start processor" → resourceName . Optional: tier , resumeFromCheckpoint , startAtOperationTime (ISO 8601 timestamp to resume from a specific point)
"stop processor" → resourceName
"modify processor" → resourceName . At least one of: pipeline , dlq , newName
"update workspace" → newRegion or newTier
"update connection" → resourceName , connectionConfig . Exception: networking config (e.g., PrivateLink) cannot be modified after creation — delete and recreate.
"accept peering" → peeringId , requesterAccountId , requesterVpcId
"reject peering" → peeringId
State pre checks:
start processor → errors if processor is already STARTED
stop processor → no ops if already STOPPED or CREATED (not an error)
modify processor → errors if processor is STARTED (must stop first)
Processor states: CREATED → STARTED (via start) → STOPPED (via stop). Can also enter FAILED on runtime errors. Modify requires STOPPED or CREATED state.
Teardown safety checks:
Processor deletion → auto stops before deleting (no need to stop manually first)
Connection deletion → blocks if any running processor references it. Stop/delete referencing processors first.
Workspace deletion → See detailed workflow below (lines 108 111).
atlas streams teardown — ALL delete operations
Resource Safety behavior
processor Auto stops before deleting
connection Blocks if referenced by running processor
workspace Cascading delete of all connections and processors
privatelink / peering Remove networking resources
Field mapping — always fill projectId , resource , then:
resource: "workspace" → workspaceName
resource: "connection" or "processor" → workspaceName , resourceName
resource: "privatelink" or "peering" → resourceName (the ID). These are project level resources, not tied to a specific workspace.
Before deleting a workspace , inspect it first:
1. atlas streams discover → inspect workspace — get connection/processor counts
2. Present to user: "Workspace X contains N connections and M processors. Deleting permanently removes all. Proceed?"
3. Wait for confirmation before calling atlas streams teardown
CRITICAL: Validate Before Creating Processors
You MUST call search knowledge before composing any processor pipeline. This is not optional.
Field validation: Query with the sink/source type, e.g. "Atlas Stream Processing $emit S3 fields" or "Atlas Stream Processing Kafka $source configuration". This catches errors like prefix vs path for S3 $emit .
Pattern examples: Query with dataSources: [{"name": "devcenter"}] for working pipelines, e.g. "Atlas Stream Processing tumbling window example".
Also fetch examples from the official ASP examples repo when building non trivial processors: https://github.com/mongodb/ASP example (quickstarts, example processors, Terraform examples). Start with example processors/README.md for the full pattern catalog.
Key quickstarts:
Quickstart Pattern
00 hello world.json Inline $source.documents with $match (zero infra, ephemeral)
01 changestream basic.json Change stream → tumbling window → $merge to Atlas
03 kafka to mongo.json Kafka source → tumbling window rollup → $merge to Atlas
04 mongo to mongo.json Chained processors: rollup → archive to separate collection
05 kafka tail.json Real time Kafka topic monitoring (sinkless, like tail f )
Pipeline Rules & Warnings
Invalid constructs — these are NOT valid in streaming pipelines:
$$NOW , $$ROOT , $$CURRENT — NOT available in stream processing. NEVER use these. Use the document's own timestamp field or stream meta metadata for event time instead of $$NOW .
HTTPS connections as $source — HTTPS is for $https enrichment or sink only, NOT as a data source
Kafka $source without topic — topic field is required
Pipelines without a sink — terminal stage ( $merge , $emit , $https , or $externalFunction async) required for deployed processors (sinkless only works via sp.process() )
Lambda as $emit target — Lambda uses $externalFunction (mid pipeline enrichment), not $emit
$validate with validationAction: "error" — crashes processor; use "dlq" instead
Required fields by stage:
$source (change stream) : include fullDocument: "updateLookup" to get the full document content
$source (Kinesis) : use stream (NOT streamName or topic )
$emit (Kinesis) : MUST include partitionKey
$emit (S3) : use path (NOT prefix )
$https : must include connectionName , path , method , as , onError: "dlq"
$externalFunction : must include connectionName , functionName , execution , as , onError: "dlq"
$validate : must include validator with $jsonSchema and validationAction: "dlq"
$lookup : include parallelism setting (e.g., parallelism: 2 ) for concurrent I/O
AWS connections (S3, Kinesis, Lambda): IAM role ARN must be registered via Atlas Cloud Provider Access first. Always confirm this with user. See [references/connection configs.md](references/connection configs.md) for details.
See [references/pipeline patterns.md](references/pipeline patterns.md) for stage field examples with JSON syntax.
SchemaRegistry connection: connectionType must be "SchemaRegistry" (not "Kafka" ). Schema type values are case sensitive (use lowercase avro , not AVRO ). See [references/connection configs.md](references/connection configs.md schemaregistry) for required fields and auth types.
MCP Tool Behaviors
Elicitation: When creating connections, the build tool auto collects missing sensitive fields (passwords, bootstrap servers) via MCP elicitation. Do NOT ask the user for these — let the tool collect them.
Auto normalization:
bootstrapServers array → auto converted to comma separated string
schemaRegistryUrls string → auto wrapped in array
dbRoleToExecute → defaults to {role: "readWriteAnyDatabase", type: "BUILT IN"} for Cluster connections
Workspace creation: includeSampleData defaults to true , which auto creates the sample stream solar connection.
Region naming: The region field uses Atlas specific names that differ by cloud provider. Using the wrong format returns a cryptic dataProcessRegion error.
Provider Cloud Region Streams region Value
AWS us east 1 VIRGINIA USA
AWS us east 2 OHIO USA
AWS eu west 1 DUBLIN IRL
GCP us central1 US CENTRAL1
GCP europe west1 EUROPE WEST1
Azure eastus eastus
Azure westeurope westeurope
See [references/connection configs.md](references/connection configs.md) for the full region mapping table. If unsure, inspect an existing workspace with atlas streams discover → inspect workspace and check dataProcessRegion.region .
Connection Capabilities — Source/Sink Reference
Know what each connection type can do before creating pipelines:
Connection Type As Source ($source) As Sink ($merge / $emit) Mid Pipeline Notes
Cluster ✅ Change streams ✅ $merge to collections ✅ $lookup Change streams monitor insert/update/delete/replace operations
Kafka ✅ Topic consumer ✅ $emit to topics ❌ Source MUST include topic field
Sample Stream ✅ Sample data ❌ Not valid ❌ Testing/demo only
S3 ❌ Not valid ✅ $emit to buckets ❌ Sink only use path , format , compression . Supports AWS PrivateLink.
Https ❌ Not valid ✅ $https as sink ✅ $https enrichment Can be used mid pipeline for enrichment OR as final sink stage
AWSLambda ❌ Not valid ✅ $externalFunction (async only) ✅ $externalFunction (sync or async) Sink: execution: "async" required. Mid pipeline: execution: "sync" or "async"
AWS Kinesis ✅ Stream consumer ✅ $emit to streams ❌ Similar to Kafka pattern
SchemaRegistry ❌ Not valid ❌ Not valid ✅ Schema resolution Metadata only used by Kafka connections for Avro schemas
Common connection usage mistakes to avoid:
❌ Using $externalFunction