Agent skill

azure-mgmt-mongodbatlas-dotnet

Manage MongoDB Atlas Organizations as Azure ARM resources using Azure.ResourceManager.MongoDBAtlas SDK. Use when creating, updating, listing, or deleting MongoDB Atlas organizations through Azure Marketplace integration. This SDK manages the Azure-side organization resource, not Atlas clusters/databases directly.

Stars 232
Forks 15

Install this agent skill to your Project

npx add-skill https://github.com/aiskillstore/marketplace/tree/main/skills/sickn33/azure-mgmt-mongodbatlas-dotnet

SKILL.md

Azure.ResourceManager.MongoDBAtlas SDK

Manage MongoDB Atlas Organizations as Azure ARM resources with unified billing through Azure Marketplace.

Package Information

Property Value
Package Azure.ResourceManager.MongoDBAtlas
Version 1.0.0 (GA)
API Version 2025-06-01
Resource Type MongoDB.Atlas/organizations
NuGet Azure.ResourceManager.MongoDBAtlas

Installation

bash
dotnet add package Azure.ResourceManager.MongoDBAtlas
dotnet add package Azure.Identity
dotnet add package Azure.ResourceManager

Important Scope Limitation

This SDK manages MongoDB Atlas Organizations as Azure ARM resources for marketplace integration. It does NOT directly manage:

  • Atlas clusters
  • Databases
  • Collections
  • Users/roles

For cluster management, use the MongoDB Atlas API directly after creating the organization.

Authentication

csharp
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.MongoDBAtlas;
using Azure.ResourceManager.MongoDBAtlas.Models;

// Create ARM client with DefaultAzureCredential
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);

Core Types

Type Purpose
MongoDBAtlasOrganizationResource ARM resource representing an Atlas organization
MongoDBAtlasOrganizationCollection Collection of organizations in a resource group
MongoDBAtlasOrganizationData Data model for organization resource
MongoDBAtlasOrganizationProperties Organization-specific properties
MongoDBAtlasMarketplaceDetails Azure Marketplace subscription details
MongoDBAtlasOfferDetails Marketplace offer configuration
MongoDBAtlasUserDetails User information for the organization
MongoDBAtlasPartnerProperties MongoDB-specific properties (org name, ID)

Workflows

Get Organization Collection

csharp
// Get resource group
var subscription = await armClient.GetDefaultSubscriptionAsync();
var resourceGroup = await subscription.GetResourceGroupAsync("my-resource-group");

// Get organizations collection
MongoDBAtlasOrganizationCollection organizations = 
    resourceGroup.Value.GetMongoDBAtlasOrganizations();

Create Organization

csharp
var organizationName = "my-atlas-org";
var location = AzureLocation.EastUS2;

// Build organization data
var organizationData = new MongoDBAtlasOrganizationData(location)
{
    Properties = new MongoDBAtlasOrganizationProperties(
        marketplace: new MongoDBAtlasMarketplaceDetails(
            subscriptionId: "your-azure-subscription-id",
            offerDetails: new MongoDBAtlasOfferDetails(
                publisherId: "mongodb",
                offerId: "mongodb_atlas_azure_native_prod",
                planId: "private_plan",
                planName: "Pay as You Go (Free) (Private)",
                termUnit: "P1M",
                termId: "gmz7xq9ge3py"
            )
        ),
        user: new MongoDBAtlasUserDetails(
            emailAddress: "admin@example.com",
            upn: "admin@example.com"
        )
        {
            FirstName = "Admin",
            LastName = "User"
        }
    )
    {
        PartnerProperties = new MongoDBAtlasPartnerProperties
        {
            OrganizationName = organizationName
        }
    },
    Tags = { ["Environment"] = "Production" }
};

// Create the organization (long-running operation)
var operation = await organizations.CreateOrUpdateAsync(
    WaitUntil.Completed,
    organizationName,
    organizationData
);

MongoDBAtlasOrganizationResource organization = operation.Value;
Console.WriteLine($"Created: {organization.Id}");

Get Existing Organization

csharp
// Option 1: From collection
MongoDBAtlasOrganizationResource org = 
    await organizations.GetAsync("my-atlas-org");

// Option 2: From resource identifier
var resourceId = MongoDBAtlasOrganizationResource.CreateResourceIdentifier(
    subscriptionId: "subscription-id",
    resourceGroupName: "my-resource-group",
    organizationName: "my-atlas-org"
);
MongoDBAtlasOrganizationResource org2 = 
    armClient.GetMongoDBAtlasOrganizationResource(resourceId);
await org2.GetAsync(); // Fetch data

List Organizations

csharp
// List in resource group
await foreach (var org in organizations.GetAllAsync())
{
    Console.WriteLine($"Org: {org.Data.Name}");
    Console.WriteLine($"  Location: {org.Data.Location}");
    Console.WriteLine($"  State: {org.Data.Properties?.ProvisioningState}");
}

// List across subscription
await foreach (var org in subscription.GetMongoDBAtlasOrganizationsAsync())
{
    Console.WriteLine($"Org: {org.Data.Name} in {org.Data.Id}");
}

Update Tags

csharp
// Add a single tag
await organization.AddTagAsync("CostCenter", "12345");

// Replace all tags
await organization.SetTagsAsync(new Dictionary<string, string>
{
    ["Environment"] = "Production",
    ["Team"] = "Platform"
});

// Remove a tag
await organization.RemoveTagAsync("OldTag");

Update Organization Properties

csharp
var patch = new MongoDBAtlasOrganizationPatch
{
    Tags = { ["UpdatedAt"] = DateTime.UtcNow.ToString("o") },
    Properties = new MongoDBAtlasOrganizationUpdateProperties
    {
        // Update user details if needed
        User = new MongoDBAtlasUserDetails(
            emailAddress: "newadmin@example.com",
            upn: "newadmin@example.com"
        )
    }
};

var updateOperation = await organization.UpdateAsync(
    WaitUntil.Completed,
    patch
);

Delete Organization

csharp
// Delete (long-running operation)
await organization.DeleteAsync(WaitUntil.Completed);

Model Properties Reference

MongoDBAtlasOrganizationProperties

Property Type Description
Marketplace MongoDBAtlasMarketplaceDetails Required. Marketplace subscription details
User MongoDBAtlasUserDetails Required. Organization admin user
PartnerProperties MongoDBAtlasPartnerProperties MongoDB-specific properties
ProvisioningState MongoDBAtlasResourceProvisioningState Read-only. Current provisioning state

MongoDBAtlasMarketplaceDetails

Property Type Description
SubscriptionId string Required. Azure subscription ID for billing
OfferDetails MongoDBAtlasOfferDetails Required. Marketplace offer configuration
SubscriptionStatus MarketplaceSubscriptionStatus Read-only. Subscription status

MongoDBAtlasOfferDetails

Property Type Description
PublisherId string Required. Publisher ID (typically "mongodb")
OfferId string Required. Offer ID
PlanId string Required. Plan ID
PlanName string Required. Display name of the plan
TermUnit string Required. Billing term unit (e.g., "P1M")
TermId string Required. Term identifier

MongoDBAtlasUserDetails

Property Type Description
EmailAddress string Required. User email address
Upn string Required. User principal name
FirstName string Optional. User first name
LastName string Optional. User last name

MongoDBAtlasPartnerProperties

Property Type Description
OrganizationName string Name of the MongoDB Atlas organization
OrganizationId string Read-only. MongoDB Atlas organization ID

Provisioning States

State Description
Succeeded Resource provisioned successfully
Failed Provisioning failed
Canceled Provisioning was canceled
Provisioning Resource is being provisioned
Updating Resource is being updated
Deleting Resource is being deleted
Accepted Request accepted, provisioning starting

Marketplace Subscription Status

Status Description
PendingFulfillmentStart Subscription pending activation
Subscribed Active subscription
Suspended Subscription suspended
Unsubscribed Subscription canceled

Best Practices

Use Async Methods

csharp
// Prefer async for all operations
var org = await organizations.GetAsync("my-org");
await org.Value.AddTagAsync("key", "value");

Handle Long-Running Operations

csharp
// Wait for completion
var operation = await organizations.CreateOrUpdateAsync(
    WaitUntil.Completed,  // Blocks until done
    name,
    data
);

// Or start and poll later
var operation = await organizations.CreateOrUpdateAsync(
    WaitUntil.Started,  // Returns immediately
    name,
    data
);

// Poll for completion
while (!operation.HasCompleted)
{
    await Task.Delay(TimeSpan.FromSeconds(5));
    await operation.UpdateStatusAsync();
}

Check Provisioning State

csharp
var org = await organizations.GetAsync("my-org");
if (org.Value.Data.Properties?.ProvisioningState == 
    MongoDBAtlasResourceProvisioningState.Succeeded)
{
    Console.WriteLine("Organization is ready");
}

Use Resource Identifiers

csharp
// Create identifier without API call
var resourceId = MongoDBAtlasOrganizationResource.CreateResourceIdentifier(
    subscriptionId,
    resourceGroupName,
    organizationName
);

// Get resource handle (no data yet)
var orgResource = armClient.GetMongoDBAtlasOrganizationResource(resourceId);

// Fetch data when needed
var response = await orgResource.GetAsync();

Common Errors

Error Cause Solution
ResourceNotFound Organization doesn't exist Verify name and resource group
AuthorizationFailed Insufficient permissions Check RBAC roles on resource group
InvalidParameter Missing required properties Ensure all required fields are set
MarketplaceError Marketplace subscription issue Verify offer details and subscription

Related Resources

Expand your agent's capabilities with these related and highly-rated skills.

aiskillstore/marketplace

perigon-backend

Perigon ASP.NET Core + EF Core + Aspire conventions

232 15
Explore
aiskillstore/marketplace

perigon-agent

Pointers for Copilot/agents to apply Perigon conventions

232 15
Explore
aiskillstore/marketplace

perigon-angular

Angular 21+ standalone/Material/signal conventions for Perigon WebApp

232 15
Explore
aiskillstore/marketplace

fastapi-mastery

Comprehensive FastAPI development skill covering REST API creation, routing, request/response handling, validation, authentication, database integration, middleware, and deployment. Use when working with FastAPI projects, building APIs, implementing CRUD operations, setting up authentication/authorization, integrating databases (SQL/NoSQL), adding middleware, handling WebSockets, or deploying FastAPI applications. Triggered by requests involving .py files with FastAPI code, API endpoint creation, Pydantic models, or FastAPI-specific features.

232 15
Explore
aiskillstore/marketplace

context7-efficient

Token-efficient library documentation fetcher using Context7 MCP with 86.8% token savings through intelligent shell pipeline filtering. Fetches code examples, API references, and best practices for JavaScript, Python, Go, Rust, and other libraries. Use when users ask about library documentation, need code examples, want API usage patterns, are learning a new framework, need syntax reference, or troubleshooting with library-specific information. Triggers include questions like "Show me React hooks", "How do I use Prisma", "What's the Next.js routing syntax", or any request for library/framework documentation.

232 15
Explore
aiskillstore/marketplace

browser-use

Browser automation using Playwright MCP. Navigate websites, fill forms, click elements, take screenshots, and extract data. Use when tasks require web browsing, form submission, web scraping, UI testing, or any browser interaction.

232 15
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results