Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Manage MongoDB Atlas Organizations as Azure ARM resources with unified billing through Azure Marketplace.
.claude/skills/azure-mgmt-mongodbatlas-dotnet/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | — | — |
| case-03 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
| case-20 | ✗→✓ | ▲ Improved | — | — |
| case-12 | ✗→✓ | ▲ Improved | — | — |
Manage MongoDB Atlas Organizations as Azure ARM resources with unified billing through Azure Marketplace.
| 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 |
bashdotnet add package Azure.ResourceManager.MongoDBAtlas dotnet add package Azure.Identity dotnet add package Azure.ResourceManager
This SDK manages MongoDB Atlas Organizations as Azure ARM resources for marketplace integration. It does NOT directly manage:
For cluster management, use the MongoDB Atlas API directly after creating the organization.
csharpusing 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);
| 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) |
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();
csharpvar 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}");
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
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}"); }
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");
csharpvar 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 );
csharp// Delete (long-running operation) await organization.DeleteAsync(WaitUntil.Completed);
| 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 |
| Property | Type | Description | |----------|------|-------------| | SubscriptionId | string | Required. Azure subscription ID for billing | | OfferDetails | MongoDBAtlasOfferDetails | Required. Marketplace offer configuration | | SubscriptionStatus | MarketplaceSubscriptionStatus | Read-only. Subscription status |
| 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 |
| 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 |
| Property | Type | Description | |----------|------|-------------| | OrganizationName | string | Name of the MongoDB Atlas organization | | OrganizationId | string | Read-only. MongoDB Atlas organization ID |
| 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 |
| Status | Description | |--------|-------------| | PendingFulfillmentStart | Subscription pending activation | | Subscribed | Active subscription | | Suspended | Subscription suspended | | Unsubscribed | Subscription canceled |
csharp// Prefer async for all operations var org = await organizations.GetAsync("my-org"); await org.Value.AddTagAsync("key", "value");
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(); }
csharpvar org = await organizations.GetAsync("my-org"); if (org.Value.Data.Properties?.ProvisioningState == MongoDBAtlasResourceProvisioningState.Succeeded) { Console.WriteLine("Organization is ready"); }
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();
| 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 |
This skill is applicable to execute the workflow or actions described in the overview.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +50 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.